From: Masahiko Sawada Date: Wed, 25 Mar 2026 16:30:26 +0000 (-0700) Subject: psql: Fix tab completion for FOREIGN DATA WRAPPER and SUBSCRIPTION. X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5fa7837d9a3970c5ea372bb90b916b54478fb818;p=thirdparty%2Fpostgresql.git psql: Fix tab completion for FOREIGN DATA WRAPPER and SUBSCRIPTION. Commit 8185bb5347 extended the CREATE/ALTER SUBSCRIPTION and CREATE/ALTER FOREIGN DATA WRAPPER commands, but missed the corresponding tab-completion logic. This commit fixes that oversight by adding completion support for: - The CONNECTION keyword in CREATE/ALTER FOREIGN DATA WRAPPER. - The list of foreign servers in CREATE/ALTER SUBSCRIPTION. Author: Yamaguchi Atsuo Discussion: https://postgr.es/m/CAKSyusJWdWcUKVd3qJXcEaQxJewGymQWV_r3-mc=Knrqo0AZ_g@mail.gmail.com --- diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index e3bdbf34a5c..523d3f39fc5 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -2353,6 +2353,8 @@ match_previous_words(int pattern_id, COMPLETE_WITH("CONNECTION", "ENABLE", "DISABLE", "OWNER TO", "RENAME TO", "REFRESH PUBLICATION", "REFRESH SEQUENCES", "SERVER", "SET", "SKIP (", "ADD PUBLICATION", "DROP PUBLICATION"); + else if (Matches("ALTER", "SUBSCRIPTION", MatchAny, "SERVER")) + COMPLETE_WITH_QUERY(Query_for_list_of_servers); /* ALTER SUBSCRIPTION REFRESH */ else if (Matches("ALTER", "SUBSCRIPTION", MatchAny, MatchAnyN, "REFRESH")) COMPLETE_WITH("PUBLICATION", "SEQUENCES"); @@ -2469,10 +2471,10 @@ match_previous_words(int pattern_id, /* ALTER FOREIGN DATA WRAPPER */ else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny)) - COMPLETE_WITH("HANDLER", "VALIDATOR", "NO", - "OPTIONS", "OWNER TO", "RENAME TO"); + COMPLETE_WITH("CONNECTION", "HANDLER", "NO", + "OPTIONS", "OWNER TO", "RENAME TO", "VALIDATOR"); else if (Matches("ALTER", "FOREIGN", "DATA", "WRAPPER", MatchAny, "NO")) - COMPLETE_WITH("HANDLER", "VALIDATOR"); + COMPLETE_WITH("CONNECTION", "HANDLER", "VALIDATOR"); /* ALTER FOREIGN TABLE */ else if (Matches("ALTER", "FOREIGN", "TABLE", MatchAny)) @@ -3559,7 +3561,7 @@ match_previous_words(int pattern_id, /* CREATE FOREIGN DATA WRAPPER */ else if (Matches("CREATE", "FOREIGN", "DATA", "WRAPPER", MatchAny)) - COMPLETE_WITH("HANDLER", "VALIDATOR", "OPTIONS"); + COMPLETE_WITH("CONNECTION", "HANDLER", "OPTIONS", "VALIDATOR"); /* CREATE FOREIGN TABLE */ else if (Matches("CREATE", "FOREIGN", "TABLE", MatchAny)) @@ -3925,7 +3927,9 @@ match_previous_words(int pattern_id, /* CREATE SUBSCRIPTION */ else if (Matches("CREATE", "SUBSCRIPTION", MatchAny)) - COMPLETE_WITH("SERVER", "CONNECTION"); + COMPLETE_WITH("CONNECTION", "SERVER"); + else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "SERVER")) + COMPLETE_WITH_QUERY(Query_for_list_of_servers); else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "SERVER", MatchAny)) COMPLETE_WITH("PUBLICATION"); else if (Matches("CREATE", "SUBSCRIPTION", MatchAny, "CONNECTION", MatchAny))