From 344b572e3eff620ffc2e3680730103e33a502bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= Date: Mon, 2 Mar 2026 18:03:44 +0100 Subject: [PATCH] psql: Tab-complete ALTER ROLE ... IN DATABASE SET/RESET Detailed completion of the RESET clause is still missing. Not sure a detailed implementation is worth the trouble. Author: Ian Lawrence Barwick Author: Vasuki M Reviewed-by: zengman Reviewed-by: Dharin Shah Reviewed-by: Surya Poondla Discussion: https://postgr.es/m/CAB8KJ=iH_v1YB2ss1A=BqvOAf28OVYiWRqUdE6TJ3pP-RdsPig@mail.gmail.com --- src/bin/psql/tab-complete.in.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 43451fce1c3..987cce820b9 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -2536,12 +2536,24 @@ match_previous_words(int pattern_id, else if (Matches("ALTER", "USER|ROLE", MatchAny) && !TailMatches("USER", "MAPPING")) COMPLETE_WITH("BYPASSRLS", "CONNECTION LIMIT", "CREATEDB", "CREATEROLE", - "ENCRYPTED PASSWORD", "INHERIT", "LOGIN", "NOBYPASSRLS", + "ENCRYPTED PASSWORD", "IN", "INHERIT", "LOGIN", "NOBYPASSRLS", "NOCREATEDB", "NOCREATEROLE", "NOINHERIT", "NOLOGIN", "NOREPLICATION", "NOSUPERUSER", "PASSWORD", "RENAME TO", "REPLICATION", "RESET", "SET", "SUPERUSER", "VALID UNTIL", "WITH"); - + /* ALTER USER,ROLE IN */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN")) + COMPLETE_WITH("DATABASE"); + /* ALTER USER,ROLE IN DATABASE */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE")) + COMPLETE_WITH_QUERY(Query_for_list_of_databases); + /* ALTER USER,ROLE IN DATABASE */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE", MatchAny)) + COMPLETE_WITH("SET", "RESET"); + /* ALTER USER,ROLE IN DATABASE SET */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "IN", "DATABASE", MatchAny, "SET")) + COMPLETE_WITH_QUERY(Query_for_list_of_set_vars); + /* XXX missing support for ALTER ROLE IN DATABASE RESET */ /* ALTER USER,ROLE RESET */ else if (Matches("ALTER", "USER|ROLE", MatchAny, "RESET")) {