diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index a9a81ab3c146..eb8bc1287202 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -1000,6 +1000,15 @@ static const SchemaQuery Query_for_trigger_of_table = { "SELECT datname FROM pg_catalog.pg_database "\ " WHERE datname LIKE '%s'" +#define Query_for_list_of_database_vars \ +"SELECT conf FROM ("\ +" SELECT setdatabase, pg_catalog.split_part(unnest(setconfig),'=',1) conf"\ +" FROM pg_db_role_setting "\ +" ) s, pg_database d "\ +" WHERE s.setdatabase = d.oid "\ +" AND conf LIKE '%s'"\ +" AND d.datname LIKE '%s'" + #define Query_for_list_of_tablespaces \ "SELECT spcname FROM pg_catalog.pg_tablespace "\ " WHERE spcname LIKE '%s'" @@ -1068,6 +1077,11 @@ Keywords_for_list_of_owner_roles, "PUBLIC" " FROM pg_catalog.pg_user_mappings "\ " WHERE usename LIKE '%s'" +#define Query_for_list_of_user_vars \ +" SELECT pg_catalog.split_part(pg_catalog.unnest(rolconfig),'=',1) "\ +" FROM pg_catalog.pg_roles "\ +" WHERE rolname LIKE '%s'" + #define Query_for_list_of_access_methods \ " SELECT amname "\ " FROM pg_catalog.pg_am "\ @@ -2320,6 +2334,13 @@ match_previous_words(int pattern_id, "IS_TEMPLATE", "ALLOW_CONNECTIONS", "CONNECTION LIMIT"); + /* ALTER DATABASE RESET */ + else if (Matches("ALTER", "DATABASE", MatchAny, "RESET")) + { + set_completion_reference(prev2_wd); + COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_database_vars, "ALL"); + } + /* ALTER DATABASE SET TABLESPACE */ else if (Matches("ALTER", "DATABASE", MatchAny, "SET", "TABLESPACE")) COMPLETE_WITH_QUERY(Query_for_list_of_tablespaces); @@ -2471,6 +2492,10 @@ match_previous_words(int pattern_id, "RENAME TO", "REPLICATION", "RESET", "SET", "SUPERUSER", "VALID UNTIL", "WITH"); + /* ALTER USER,ROLE RESET */ + else if (Matches("ALTER", "USER|ROLE", MatchAny, "RESET")) + COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_user_vars, "ALL"); + /* ALTER USER,ROLE WITH */ else if (Matches("ALTER", "USER|ROLE", MatchAny, "WITH")) /* Similar to the above, but don't complete "WITH" again. */ @@ -4906,7 +4931,9 @@ match_previous_words(int pattern_id, /* SET, RESET, SHOW */ /* Complete with a variable name */ - else if (TailMatches("SET|RESET") && !TailMatches("UPDATE", MatchAny, "SET")) + else if (TailMatches("SET|RESET") && + !TailMatches("UPDATE", MatchAny, "SET") && + !TailMatches("ALTER", "DATABASE", MatchAny, "RESET")) COMPLETE_WITH_QUERY_VERBATIM_PLUS(Query_for_list_of_set_vars, "CONSTRAINTS", "TRANSACTION",