diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index e72c5b9..994c053 100644 *** a/src/bin/psql/tab-complete.c --- b/src/bin/psql/tab-complete.c *************** psql_completion(char *text, int start, i *** 714,720 **** *prev2_wd, *prev3_wd, *prev4_wd, ! *prev5_wd; static const char *const sql_commands[] = { "ABORT", "ALTER", "ANALYZE", "BEGIN", "CHECKPOINT", "CLOSE", "CLUSTER", --- 714,721 ---- *prev2_wd, *prev3_wd, *prev4_wd, ! *prev5_wd, ! *prev6_wd; static const char *const sql_commands[] = { "ABORT", "ALTER", "ANALYZE", "BEGIN", "CHECKPOINT", "CLOSE", "CLUSTER", *************** psql_completion(char *text, int start, i *** 762,767 **** --- 763,769 ---- prev3_wd = previous_word(start, 2); prev4_wd = previous_word(start, 3); prev5_wd = previous_word(start, 4); + prev6_wd = previous_word(start, 5); /* If a backslash command was started, continue */ if (text[0] == '\\') *************** psql_completion(char *text, int start, i *** 1547,1559 **** pg_strcasecmp(prev_wd, "ON") == 0) { static const char *const list_COMMENT[] = ! {"CAST", "COLLATION", "CONVERSION", "DATABASE", "FOREIGN TABLE", "INDEX", "LANGUAGE", "RULE", "SCHEMA", "SEQUENCE", "TABLE", "TYPE", "VIEW", "COLUMN", "AGGREGATE", "FUNCTION", "OPERATOR", "TRIGGER", "CONSTRAINT", "DOMAIN", "LARGE OBJECT", "TABLESPACE", "TEXT SEARCH", "ROLE", NULL}; COMPLETE_WITH_LIST(list_COMMENT); } else if (pg_strcasecmp(prev4_wd, "COMMENT") == 0 && pg_strcasecmp(prev3_wd, "ON") == 0 && pg_strcasecmp(prev2_wd, "TEXT") == 0 && --- 1549,1571 ---- pg_strcasecmp(prev_wd, "ON") == 0) { static const char *const list_COMMENT[] = ! {"CAST", "COLLATION", "CONVERSION", "DATABASE", "FOREIGN DATA WRAPPER", ! "SERVER", "FOREIGN TABLE", "INDEX", "LANGUAGE", "RULE", "SCHEMA", "SEQUENCE", "TABLE", "TYPE", "VIEW", "COLUMN", "AGGREGATE", "FUNCTION", "OPERATOR", "TRIGGER", "CONSTRAINT", "DOMAIN", "LARGE OBJECT", "TABLESPACE", "TEXT SEARCH", "ROLE", NULL}; COMPLETE_WITH_LIST(list_COMMENT); } + else if (pg_strcasecmp(prev3_wd, "COMMENT") == 0 && + pg_strcasecmp(prev2_wd, "ON") == 0 && + pg_strcasecmp(prev_wd, "FOREIGN") == 0) + { + static const char *const list_TRANS2[] = + {"DATA WRAPPER", "TABLE", NULL}; + + COMPLETE_WITH_LIST(list_TRANS2); + } else if (pg_strcasecmp(prev4_wd, "COMMENT") == 0 && pg_strcasecmp(prev3_wd, "ON") == 0 && pg_strcasecmp(prev2_wd, "TEXT") == 0 && *************** psql_completion(char *text, int start, i *** 1566,1571 **** --- 1578,1585 ---- } else if ((pg_strcasecmp(prev4_wd, "COMMENT") == 0 && pg_strcasecmp(prev3_wd, "ON") == 0) || + (pg_strcasecmp(prev6_wd, "COMMENT") == 0 && + pg_strcasecmp(prev5_wd, "ON") == 0) || (pg_strcasecmp(prev5_wd, "ON") == 0 && pg_strcasecmp(prev4_wd, "TEXT") == 0 && pg_strcasecmp(prev3_wd, "SEARCH") == 0))