[PATCH] psql: Add tab completion for \copy pstdin and pstdout
Yugo Nagata <nagata@sraoss.co.jp>
From: Yugo Nagata <nagata@sraoss.co.jp>
To:
Date: 2025-12-31T09:27:46Z
Lists: pgsql-hackers
---
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 75a101c6ab5..5edb9ad4d77 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 <sth> 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 <sth> FROM|TO PROGRAM */
--
2.43.0
--Multipart=_Wed__31_Dec_2025_18_39_53_+0900_MoOLGgwBwcE6QY1.--