@@ -874,6 +874,11 @@ static const SchemaQuery Query_for_list_of_matviews = {
874874" AND d.datname = pg_catalog.current_database() "\
875875" AND s.subdbid = d.oid"
876876
877+ #define Query_for_list_of_compression_methods \
878+ " SELECT pg_catalog.quote_ident(cmname) "\
879+ " FROM pg_catalog.pg_compression "\
880+ " WHERE substring(pg_catalog.quote_ident(cmname),1,%d)='%s'"
881+
877882/* the silly-looking length condition is just to eat up the current word */
878883#define Query_for_list_of_arguments \
879884"SELECT pg_catalog.oidvectortypes(proargtypes)||')' "\
@@ -996,6 +1001,7 @@ static const pgsql_thing_t words_after_create[] = {
9961001 * CREATE CONSTRAINT TRIGGER is not supported here because it is designed
9971002 * to be used only by pg_dump.
9981003 */
1004+ {"COMPRESSION METHOD" ,NULL ,NULL },
9991005{"CONFIGURATION" ,Query_for_list_of_ts_configurations ,NULL ,THING_NO_SHOW },
10001006{"CONVERSION" ,"SELECT pg_catalog.quote_ident(conname) FROM pg_catalog.pg_conversion WHERE substring(pg_catalog.quote_ident(conname),1,%d)='%s'" },
10011007{"DATABASE" ,Query_for_list_of_databases },
@@ -1404,8 +1410,8 @@ psql_completion(const char *text, int start, int end)
14041410static const char * const backslash_commands []= {
14051411"\\a" ,"\\connect" ,"\\conninfo" ,"\\C" ,"\\cd" ,"\\copy" ,
14061412"\\copyright" ,"\\crosstabview" ,
1407- "\\d" ,"\\da" ,"\\dA" ,"\\db" ,"\\dc" ,"\\dC" ,"\\dd " ,"\\ddp " ,"\\dD " ,
1408- "\\des" ,"\\det" ,"\\deu" ,"\\dew" ,"\\dE" ,"\\df" ,
1413+ "\\d" ,"\\da" ,"\\dA" ,"\\db" ,"\\dc" ,"\\dC" ,"\\dCM " ,"\\dd " ,"\\ddp " ,
1414+ "\\dD" , "\\ des" ,"\\det" ,"\\deu" ,"\\dew" ,"\\dE" ,"\\df" ,
14091415"\\dF" ,"\\dFd" ,"\\dFp" ,"\\dFt" ,"\\dg" ,"\\di" ,"\\dl" ,"\\dL" ,
14101416"\\dm" ,"\\dn" ,"\\do" ,"\\dO" ,"\\dp" ,"\\drds" ,"\\ds" ,"\\dS" ,
14111417"\\dt" ,"\\dT" ,"\\dv" ,"\\du" ,"\\dx" ,"\\dy" ,
@@ -1906,11 +1912,17 @@ psql_completion(const char *text, int start, int end)
19061912/* ALTER TABLE ALTER [COLUMN] <foo> SET */
19071913else if (Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" )||
19081914Matches6 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ))
1909- COMPLETE_WITH_LIST5 ("(" ,"DEFAULT" ,"NOT NULL" ,"STATISTICS" ,"STORAGE" );
1915+ COMPLETE_WITH_LIST6 ("(" , "COMPRESSED " ,"DEFAULT" ,"NOT NULL" ,"STATISTICS" ,"STORAGE" );
19101916/* ALTER TABLE ALTER [COLUMN] <foo> SET ( */
19111917else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"(" )||
19121918Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"(" ))
19131919COMPLETE_WITH_LIST2 ("n_distinct" ,"n_distinct_inherited" );
1920+ else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"COMPRESSED" )||
1921+ Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"COMPRESSED" ))
1922+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
1923+ else if (Matches9 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"COMPRESSED" ,MatchAny )||
1924+ Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"COMPRESSED" ,MatchAny ))
1925+ COMPLETE_WITH_CONST ("WITH (" );
19141926/* ALTER TABLE ALTER [COLUMN] <foo> SET STORAGE */
19151927else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"STORAGE" )||
19161928Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"STORAGE" ))
@@ -2125,12 +2137,14 @@ psql_completion(const char *text, int start, int end)
21252137"SERVER" ,"INDEX" ,"LANGUAGE" ,"POLICY" ,"PUBLICATION" ,"RULE" ,"SCHEMA" ,"SEQUENCE" ,"SUBSCRIPTION" ,
21262138"TABLE" ,"TYPE" ,"VIEW" ,"MATERIALIZED VIEW" ,"COLUMN" ,"AGGREGATE" ,"FUNCTION" ,
21272139"OPERATOR" ,"TRIGGER" ,"CONSTRAINT" ,"DOMAIN" ,"LARGE OBJECT" ,
2128- "TABLESPACE" ,"TEXT SEARCH" ,"ROLE" ,NULL };
2140+ "TABLESPACE" ,"TEXT SEARCH" ,"ROLE" ,"COMPRESSION METHOD" , NULL };
21292141
21302142COMPLETE_WITH_LIST (list_COMMENT );
21312143}
21322144else if (Matches4 ("COMMENT" ,"ON" ,"ACCESS" ,"METHOD" ))
21332145COMPLETE_WITH_QUERY (Query_for_list_of_access_methods );
2146+ else if (Matches4 ("COMMENT" ,"ON" ,"COMPRESSION" ,"METHOD" ))
2147+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
21342148else if (Matches3 ("COMMENT" ,"ON" ,"FOREIGN" ))
21352149COMPLETE_WITH_LIST2 ("DATA WRAPPER" ,"TABLE" );
21362150else if (Matches4 ("COMMENT" ,"ON" ,"TEXT" ,"SEARCH" ))
@@ -2203,6 +2217,17 @@ psql_completion(const char *text, int start, int end)
22032217else if (Matches6 ("CREATE" ,"ACCESS" ,"METHOD" ,MatchAny ,"TYPE" ,MatchAny ))
22042218COMPLETE_WITH_CONST ("HANDLER" );
22052219
2220+ /* CREATE COMPRESSION METHOD */
2221+ /* Complete "CREATE COMPRESSION METHOD <name>" */
2222+ else if (Matches4 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ))
2223+ COMPLETE_WITH_CONST ("FOR" );
2224+ /* Complete "CREATE COMPRESSION METHOD <name> FOR" */
2225+ else if (Matches5 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ,"FOR" ))
2226+ COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_datatypes ,NULL );
2227+ /* Complete "CREATE COMPRESSION METHOD <name> FOR <type>" */
2228+ else if (Matches6 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ,"FOR" ,MatchAny ))
2229+ COMPLETE_WITH_CONST ("HANDLER" );
2230+
22062231/* CREATE DATABASE */
22072232else if (Matches3 ("CREATE" ,"DATABASE" ,MatchAny ))
22082233COMPLETE_WITH_LIST9 ("OWNER" ,"TEMPLATE" ,"ENCODING" ,"TABLESPACE" ,
@@ -2603,6 +2628,7 @@ psql_completion(const char *text, int start, int end)
26032628Matches4 ("DROP" ,"ACCESS" ,"METHOD" ,MatchAny )||
26042629 (Matches4 ("DROP" ,"AGGREGATE|FUNCTION" ,MatchAny ,MatchAny )&&
26052630ends_with (prev_wd ,')' ))||
2631+ Matches4 ("DROP" ,"COMPRESSION" ,"METHOD" ,MatchAny )||
26062632Matches4 ("DROP" ,"EVENT" ,"TRIGGER" ,MatchAny )||
26072633Matches5 ("DROP" ,"FOREIGN" ,"DATA" ,"WRAPPER" ,MatchAny )||
26082634Matches4 ("DROP" ,"FOREIGN" ,"TABLE" ,MatchAny )||
@@ -2695,6 +2721,12 @@ psql_completion(const char *text, int start, int end)
26952721else if (Matches3 ("DROP" ,"SUBSCRIPTION" ,MatchAny ))
26962722COMPLETE_WITH_LIST2 ("DROP SLOT" ,"NODROP SLOT" );
26972723
2724+ /* DROP COMPRESSION METHOD */
2725+ else if (Matches2 ("DROP" ,"COMPRESSION" ))
2726+ COMPLETE_WITH_CONST ("METHOD" );
2727+ else if (Matches3 ("DROP" ,"COMPRESSION" ,"METHOD" ))
2728+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
2729+
26982730/* EXECUTE */
26992731else if (Matches1 ("EXECUTE" ))
27002732COMPLETE_WITH_QUERY (Query_for_list_of_prepared_statements );
@@ -3325,6 +3357,8 @@ psql_completion(const char *text, int start, int end)
33253357COMPLETE_WITH_QUERY (Query_for_list_of_access_methods );
33263358else if (TailMatchesCS1 ("\\db*" ))
33273359COMPLETE_WITH_QUERY (Query_for_list_of_tablespaces );
3360+ else if (TailMatchesCS1 ("\\dCM*" ))
3361+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
33283362else if (TailMatchesCS1 ("\\dD*" ))
33293363COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_domains ,NULL );
33303364else if (TailMatchesCS1 ("\\des*" ))