From 0558aeaad6b018804aacf60ef00bb4dc3ad62e7e Mon Sep 17 00:00:00 2001 From: Vignesh C Date: Wed, 15 Apr 2026 18:30:03 +0530 Subject: [PATCH] Fix tab completion after EXCEPT() in IMPORT FOREIGN SCHEMA Tab completion for IMPORT FOREIGN SCHEMA incorrectly suggested FROM SERVER after EXCEPT (...), because EXCEPT (...) is now also valid in CREATE and ALTER PUBLICATION. Previously, the generic TailMatches("EXCEPT", "(*)") check was safe because no other command used 'EXCEPT (...)'. After adding support for 'EXCEPT (...)' in publication commands, the same completion rule started matching unrelated statements and incorrectly offered 'FROM SERVER' there as well. Fix this by restricting the 'EXCEPT (...)' completion path to 'IMPORT FOREIGN SCHEMA' using HeadMatches(), while keeping the existing 'LIMIT TO (...)' behavior unchanged. This ensures 'FROM SERVER' is suggested only for valid 'IMPORT FOREIGN SCHEMA' syntax. --- src/bin/psql/tab-complete.in.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 9990f818942..88444096dc1 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -4899,9 +4899,11 @@ match_previous_words(int pattern_id, COMPLETE_WITH("SCHEMA"); else if (Matches("IMPORT", "FOREIGN", "SCHEMA", MatchAny)) COMPLETE_WITH("EXCEPT (", "FROM SERVER", "LIMIT TO ("); - else if (TailMatches("LIMIT", "TO", "(*)") || + else if (HeadMatches("IMPORT", "FOREIGN", "SCHEMA", MatchAny) && TailMatches("EXCEPT", "(*)")) COMPLETE_WITH("FROM SERVER"); + else if (TailMatches("LIMIT", "TO", "(*)")) + COMPLETE_WITH("FROM SERVER"); else if (TailMatches("FROM", "SERVER", MatchAny)) COMPLETE_WITH("INTO"); else if (TailMatches("FROM", "SERVER", MatchAny, "INTO")) -- 2.43.0