diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c new file mode 100644 index 9a7eca0..d01bfcc *** a/src/bin/psql/tab-complete.c --- b/src/bin/psql/tab-complete.c *************** psql_completion(char *text, int start, i *** 1553,1562 **** 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); --- 1553,1564 ---- pg_strcasecmp(prev_wd, "ON") == 0) { static const char *const list_COMMENT[] = ! {"CAST", "COLLATION", "CONVERSION", "DATABASE", "EXTENSION", ! "FOREIGN DATA WRAPPER", "SERVER", "FOREIGN TABLE", "INDEX", ! "LANGUAGE", "PROCEDURAL LANGUAGE", "RULE", "SCHEMA", "SEQUENCE", ! "TABLE", "TYPE", "VIEW", "COLUMN", "AGGREGATE", "FUNCTION", ! "OPERATOR", "OPERATOR CLASS", "OPERATOR FAMILY", "TRIGGER", ! "CONSTRAINT", "DOMAIN", "LARGE OBJECT", "TABLESPACE", "TEXT SEARCH", "ROLE", NULL}; COMPLETE_WITH_LIST(list_COMMENT); *************** psql_completion(char *text, int start, i *** 1580,1592 **** COMPLETE_WITH_LIST(list_TRANS2); } 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)) COMPLETE_WITH_CONST("IS"); /* COPY */ --- 1582,1600 ---- COMPLETE_WITH_LIST(list_TRANS2); } + /* COMMENT ON LANGUAGE will be caught further below, via words_after_create + */ + else if ((pg_strcasecmp(prev_wd, "LANGUAGE") == 0) && + (pg_strcasecmp(prev2_wd, "PROCEDURAL") == 0) && + (pg_strcasecmp(prev3_wd, "ON") == 0) && + (pg_strcasecmp(prev4_wd, "COMMENT") == 0)) + { + COMPLETE_WITH_QUERY(Query_for_list_of_languages); + } 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)) COMPLETE_WITH_CONST("IS"); /* COPY */