From 02cf5d1fd6bed3816249c9c4d967a7c96d6b5b9f Mon Sep 17 00:00:00 2001 From: reshke Date: Mon, 11 Aug 2025 13:14:14 +0000 Subject: [PATCH v3] Add tab completion for ALTER TABLE xxx ALTER CONTRAINT ... patterns. Support for changing contraint deferrability, inheritance and enforceability Author: reshke Co-authored-by: Roman Khapov --- src/bin/psql/tab-complete.in.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 75a101c6ab5..75cc42bc556 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -2907,6 +2907,22 @@ match_previous_words(int pattern_id, set_completion_reference(prev3_wd); COMPLETE_WITH_SCHEMA_QUERY(Query_for_constraint_of_table); } + /* if we have ALTER TABLE ALTER|DROP|RENAME CONSTRAINT , provide possible patterns */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER|DROP|RENAME", "CONSTRAINT", MatchAny)) + { + COMPLETE_WITH("ENFORCED", "NOT ENFORCED", "NO INHERIT", "INHERIT", "DEFERRABLE", + "NOT DEFERRABLE", "INITIALLY IMMEDIATE", "INITIALLY DEFERRED"); + } + /* if we have ALTER TABLE ALTER|DROP|RENAME CONSTRAINT NO, provide INHERIT */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER|DROP|RENAME", "CONSTRAINT", MatchAny, "NO")) + { + COMPLETE_WITH("INHERIT"); + } + /* if we have ALTER TABLE ALTER|DROP|RENAME CONSTRAINT NOT, provide DEFERRABLE or ENFORCED */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER|DROP|RENAME", "CONSTRAINT", MatchAny, "NOT")) + { + COMPLETE_WITH("DEFERRABLE", "ENFORCED"); + } /* ALTER TABLE VALIDATE CONSTRAINT */ else if (Matches("ALTER", "TABLE", MatchAny, "VALIDATE", "CONSTRAINT")) { -- 2.43.0