diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
new file mode 100644
index 6a81416..eb592bb
*** a/src/bin/psql/tab-complete.c
--- b/src/bin/psql/tab-complete.c
*************** typedef struct
*** 877,882 ****
--- 877,883 ----
  #define THING_NO_SHOW		(THING_NO_CREATE | THING_NO_DROP)
  
  static const pgsql_thing_t words_after_create[] = {
+ 	{"ACCESS METHOD", NULL, NULL},
  	{"AGGREGATE", NULL, &Query_for_list_of_aggregates},
  	{"CAST", NULL, NULL},		/* Casts have complex structures for names, so
  								 * skip it */
*************** psql_completion(const char *text, int st
*** 1977,1982 ****
--- 1978,1994 ----
  		COMPLETE_WITH_LIST5("HEADER", "QUOTE", "ESCAPE", "FORCE QUOTE",
  							"FORCE NOT NULL");
  
+ 	/* CREATE ACCESS METHOD */
+ 	/* Complete "CREATE ACCESS METHOD <name>" */
+ 	else if (Matches4("CREATE", "ACCESS", "METHOD", MatchAny))
+ 		COMPLETE_WITH_CONST("TYPE");
+ 	/* Complete "CREATE ACCESS METHOD <name> TYPE" */
+ 	else if (Matches5("CREATE", "ACCESS", "METHOD", MatchAny, "TYPE"))
+ 		COMPLETE_WITH_CONST("INDEX");
+ 	/* Complete "CREATE ACCESS METHOD <name> TYPE <type>" */
+ 	else if (Matches6("CREATE", "ACCESS", "METHOD", MatchAny, "TYPE", MatchAny))
+ 		COMPLETE_WITH_CONST("HANDLER");
+ 
  	/* CREATE DATABASE */
  	else if (Matches3("CREATE", "DATABASE", MatchAny))
  		COMPLETE_WITH_LIST9("OWNER", "TEMPLATE", "ENCODING", "TABLESPACE",
*************** psql_completion(const char *text, int st
*** 2263,2268 ****
--- 2275,2281 ----
  	else if (Matches3("DROP",
  					  "COLLATION|CONVERSION|DOMAIN|EXTENSION|LANGUAGE|SCHEMA|SEQUENCE|SERVER|TABLE|TYPE|VIEW",
  					  MatchAny) ||
+ 			 Matches4("DROP", "ACCESS", "METHOD", MatchAny) ||
  			 (Matches4("DROP", "AGGREGATE|FUNCTION", MatchAny, MatchAny) &&
  			  ends_with(prev_wd, ')')) ||
  			 Matches4("DROP", "EVENT", "TRIGGER", MatchAny) ||
