From 28c4b8a05ba5431168e4bc8683f07e03ac911a2c Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Wed, 7 Jan 2026 16:22:42 -0800 Subject: [PATCH] psql: Add tab completion for pstdin and pstdout in \copy. This commit adds tab completion support for the keywords "pstdin" and "pstdout" in the \copy command. "pstdin" is now suggested after FROM, and "pstdout" is suggested after TO, alongside filenames and other keywords. Author: Yugo Nagata Reviewed-by: Srinath Reddy Sadipiralla Reviewed-by: Kirill Reshke Reviewed-by: Masahiko Sawada Discussion: https://postgr.es/m/20251231183953.95132e171e43abd5e9b78084@sraoss.co.jp --- src/bin/psql/tab-complete.in.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 06edea98f06..8b91bc00062 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -3357,13 +3357,22 @@ match_previous_words(int pattern_id, /* Complete COPY|\copy FROM|TO with filename or STDIN/STDOUT/PROGRAM */ else if (Matches("COPY|\\copy", MatchAny, "FROM|TO")) { - /* COPY requires quoted filename */ - bool force_quote = HeadMatches("COPY"); - - if (TailMatches("FROM")) - COMPLETE_WITH_FILES_PLUS("", force_quote, "STDIN", "PROGRAM"); + if (HeadMatches("COPY")) + { + /* COPY requires quoted filename */ + if (TailMatches("FROM")) + COMPLETE_WITH_FILES_PLUS("", true, "STDIN", "PROGRAM"); + else + COMPLETE_WITH_FILES_PLUS("", true, "STDOUT", "PROGRAM"); + } else - COMPLETE_WITH_FILES_PLUS("", force_quote, "STDOUT", "PROGRAM"); + { + /* \copy supports pstdin and pstdout */ + if (TailMatches("FROM")) + COMPLETE_WITH_FILES_PLUS("", false, "STDIN", "PSTDIN", "PROGRAM"); + else + COMPLETE_WITH_FILES_PLUS("", false, "STDOUT", "PSTDOUT", "PROGRAM"); + } } /* Complete COPY|\copy FROM|TO PROGRAM */