@@ -953,6 +953,13 @@ psql_completion(const char *text, int start, int end)
953953
954954/* ALTER */
955955
956+ /* ALTER TABLE */
957+ else if (pg_strcasecmp (prev2_wd ,"ALTER" )== 0 &&
958+ pg_strcasecmp (prev_wd ,"TABLE" )== 0 )
959+ {
960+ COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_tables ,
961+ "UNION SELECT 'ALL IN TABLESPACE'" );
962+ }
956963/*
957964 * complete with what you can alter (TABLE, GROUP, USER, ...) unless we're
958965 * in ALTER TABLE sth ALTER
@@ -970,6 +977,25 @@ psql_completion(const char *text, int start, int end)
970977
971978COMPLETE_WITH_LIST (list_ALTER );
972979}
980+ /* ALTER TABLE,INDEX,MATERIALIZED VIEW xxx ALL IN TABLESPACE xxx */
981+ else if (pg_strcasecmp (prev4_wd ,"ALL" )== 0 &&
982+ pg_strcasecmp (prev3_wd ,"IN" )== 0 &&
983+ pg_strcasecmp (prev2_wd ,"TABLESPACE" )== 0 )
984+ {
985+ static const char * const list_ALTERALLINTSPC []=
986+ {"SET TABLESPACE" ,"OWNED BY" ,NULL };
987+
988+ COMPLETE_WITH_LIST (list_ALTERALLINTSPC );
989+ }
990+ /* ALTER TABLE,INDEX,MATERIALIZED VIEW xxx ALL IN TABLESPACE xxx OWNED BY */
991+ else if (pg_strcasecmp (prev6_wd ,"ALL" )== 0 &&
992+ pg_strcasecmp (prev5_wd ,"IN" )== 0 &&
993+ pg_strcasecmp (prev4_wd ,"TABLESPACE" )== 0 &&
994+ pg_strcasecmp (prev2_wd ,"OWNED" )== 0 &&
995+ pg_strcasecmp (prev4_wd ,"BY" )== 0 )
996+ {
997+ COMPLETE_WITH_QUERY (Query_for_list_of_roles );
998+ }
973999/* ALTER AGGREGATE,FUNCTION <name> */
9741000else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
9751001 (pg_strcasecmp (prev2_wd ,"AGGREGATE" )== 0 ||
@@ -1106,6 +1132,13 @@ psql_completion(const char *text, int start, int end)
11061132COMPLETE_WITH_LIST (list_ALTER_FOREIGN_TABLE );
11071133}
11081134
1135+ /* ALTER INDEX */
1136+ else if (pg_strcasecmp (prev2_wd ,"ALTER" )== 0 &&
1137+ pg_strcasecmp (prev_wd ,"INDEX" )== 0 )
1138+ {
1139+ COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_indexes ,
1140+ "UNION SELECT 'ALL IN TABLESPACE'" );
1141+ }
11091142/* ALTER INDEX <name> */
11101143else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
11111144pg_strcasecmp (prev2_wd ,"INDEX" )== 0 )
@@ -1169,7 +1202,8 @@ psql_completion(const char *text, int start, int end)
11691202pg_strcasecmp (prev2_wd ,"MATERIALIZED" )== 0 &&
11701203pg_strcasecmp (prev_wd ,"VIEW" )== 0 )
11711204{
1172- COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_matviews ,NULL );
1205+ COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_matviews ,
1206+ "UNION SELECT 'ALL IN TABLESPACE'" );
11731207}
11741208
11751209/* ALTER USER,ROLE <name> */
@@ -1749,12 +1783,12 @@ psql_completion(const char *text, int start, int end)
17491783COMPLETE_WITH_CONST ("IDENTITY" );
17501784}
17511785
1752- /* ALTER TABLESPACE <foo> with RENAME TO, OWNER TO, SET, RESET, MOVE */
1786+ /* ALTER TABLESPACE <foo> with RENAME TO, OWNER TO, SET, RESET */
17531787else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
17541788pg_strcasecmp (prev2_wd ,"TABLESPACE" )== 0 )
17551789{
17561790static const char * const list_ALTERTSPC []=
1757- {"RENAME TO" ,"OWNER TO" ,"SET" ,"RESET" ,"MOVE" , NULL };
1791+ {"RENAME TO" ,"OWNER TO" ,"SET" ,"RESET" ,NULL };
17581792
17591793COMPLETE_WITH_LIST (list_ALTERTSPC );
17601794}
@@ -1776,27 +1810,6 @@ psql_completion(const char *text, int start, int end)
17761810
17771811COMPLETE_WITH_LIST (list_TABLESPACEOPTIONS );
17781812}
1779- /* ALTER TABLESPACE <foo> MOVE ALL|TABLES|INDEXES|MATERIALIZED VIEWS */
1780- else if (pg_strcasecmp (prev4_wd ,"ALTER" )== 0 &&
1781- pg_strcasecmp (prev3_wd ,"TABLESPACE" )== 0 &&
1782- pg_strcasecmp (prev_wd ,"MOVE" )== 0 )
1783- {
1784- static const char * const list_TABLESPACEMOVETARGETS []=
1785- {"ALL" ,"TABLES" ,"INDEXES" ,"MATERIALIZED VIEWS" ,NULL };
1786-
1787- COMPLETE_WITH_LIST (list_TABLESPACEMOVETARGETS );
1788- }
1789- else if ((pg_strcasecmp (prev4_wd ,"TABLESPACE" )== 0 &&
1790- pg_strcasecmp (prev2_wd ,"MOVE" )== 0 )||
1791- (pg_strcasecmp (prev5_wd ,"TABLESPACE" )== 0 &&
1792- pg_strcasecmp (prev3_wd ,"MOVE" )== 0 &&
1793- pg_strcasecmp (prev2_wd ,"MATERIALIZED" )== 0 ))
1794- {
1795- static const char * const list_TABLESPACEMOVEOPTIONS []=
1796- {"OWNED BY" ,"TO" ,NULL };
1797-
1798- COMPLETE_WITH_LIST (list_TABLESPACEMOVEOPTIONS );
1799- }
18001813
18011814/* ALTER TEXT SEARCH */
18021815else if (pg_strcasecmp (prev3_wd ,"ALTER" )== 0 &&
@@ -2798,9 +2811,8 @@ psql_completion(const char *text, int start, int end)
27982811 * but we may as well tab-complete both: perhaps some users prefer one
27992812 * variant or the other.
28002813 */
2801- else if ((pg_strcasecmp (prev3_wd ,"FETCH" )== 0 ||
2802- pg_strcasecmp (prev3_wd ,"MOVE" )== 0 )&&
2803- pg_strcasecmp (prev_wd ,"TO" )!= 0 )
2814+ else if (pg_strcasecmp (prev3_wd ,"FETCH" )== 0 ||
2815+ pg_strcasecmp (prev3_wd ,"MOVE" )== 0 )
28042816{
28052817static const char * const list_FROMIN []=
28062818{"FROM" ,"IN" ,NULL };