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 */
