@@ -845,6 +845,18 @@ static const SchemaQuery Query_for_list_of_matviews = {
845
845
" FROM pg_catalog.pg_am "\
846
846
" WHERE substring(pg_catalog.quote_ident(amname),1,%d)='%s'"
847
847
848
+ #define Query_for_list_of_publications \
849
+ " SELECT pg_catalog.quote_ident(pubname) "\
850
+ " FROM pg_catalog.pg_publication "\
851
+ " WHERE substring(pg_catalog.quote_ident(pubname),1,%d)='%s'"
852
+
853
+ #define Query_for_list_of_subscriptions \
854
+ " SELECT pg_catalog.quote_ident(s.subname) "\
855
+ " FROM pg_catalog.pg_subscription s, pg_catalog.pg_database d "\
856
+ " WHERE substring(pg_catalog.quote_ident(s.subname),1,%d)='%s' "\
857
+ " AND d.datname = pg_catalog.current_database() "\
858
+ " AND s.subdbid = d.oid"
859
+
848
860
/* the silly-looking length condition is just to eat up the current word */
849
861
#define Query_for_list_of_arguments \
850
862
"SELECT pg_catalog.oidvectortypes(proargtypes)||')' "\
@@ -985,13 +997,13 @@ static const pgsql_thing_t words_after_create[] = {
985
997
{"OWNED" , NULL , NULL , THING_NO_CREATE }, /* for DROP OWNED BY ... */
986
998
{"PARSER" , Query_for_list_of_ts_parsers , NULL , THING_NO_SHOW },
987
999
{"POLICY" , NULL , NULL },
988
- {"PUBLICATION" , NULL , NULL },
1000
+ {"PUBLICATION" , Query_for_list_of_publications },
989
1001
{"ROLE" , Query_for_list_of_roles },
990
1002
{"RULE" , "SELECT pg_catalog.quote_ident(rulename) FROM pg_catalog.pg_rules WHERE substring(pg_catalog.quote_ident(rulename),1,%d)='%s'" },
991
1003
{"SCHEMA" , Query_for_list_of_schemas },
992
1004
{"SEQUENCE" , NULL , & Query_for_list_of_sequences },
993
1005
{"SERVER" , Query_for_list_of_servers },
994
- {"SUBSCRIPTION" , NULL , NULL },
1006
+ {"SUBSCRIPTION" , Query_for_list_of_subscriptions },
995
1007
{"TABLE" , NULL , & Query_for_list_of_tables },
996
1008
{"TABLESPACE" , Query_for_list_of_tablespaces },
997
1009
{"TEMP" , NULL , NULL , THING_NO_DROP }, /* for CREATE TEMP TABLE ... */
@@ -2374,8 +2386,13 @@ psql_completion(const char *text, int start, int end)
2374
2386
/* CREATE SUBSCRIPTION */
2375
2387
else if (Matches3 ("CREATE" , "SUBSCRIPTION" , MatchAny ))
2376
2388
COMPLETE_WITH_CONST ("CONNECTION" );
2377
- else if (Matches5 ("CREATE" , "SUBSCRIPTION" , MatchAny , "CONNECTION" ,MatchAny ))
2389
+ else if (Matches5 ("CREATE" , "SUBSCRIPTION" , MatchAny , "CONNECTION" , MatchAny ))
2378
2390
COMPLETE_WITH_CONST ("PUBLICATION" );
2391
+ else if (Matches6 ("CREATE" , "SUBSCRIPTION" , MatchAny , "CONNECTION" ,
2392
+ MatchAny , "PUBLICATION" ))
2393
+ {
2394
+ /* complete with nothing here as this refers to remote publications */
2395
+ }
2379
2396
/* Complete "CREATE SUBSCRIPTION <name> ... WITH ( <opt>" */
2380
2397
else if (HeadMatches2 ("CREATE" , "SUBSCRIPTION" ) && TailMatches2 ("WITH" , "(" ))
2381
2398
COMPLETE_WITH_LIST5 ("ENABLED" , "DISABLED" , "CREATE SLOT" ,
0 commit comments