From 83dbde94f726f2517a79b1cea59e57452c36e734 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 27 May 2016 11:03:18 -0400 Subject: [PATCH] Fix DROP ACCESS METHOD IF EXISTS. The IF EXISTS option was documented, and implemented in the grammar, but it didn't actually work for lack of support in does_not_exist_skipping(). Per bug #14160. Report and patch by Kouhei Sutou Report: <20160527070433.19424.81712@wrigleys.postgresql.org> --- src/backend/commands/dropcmds.c | 6 +++++- src/test/regress/expected/drop_if_exists.out | 5 +++++ src/test/regress/sql/drop_if_exists.sql | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c index 522027ac3e..61ff8f2190 100644 --- a/src/backend/commands/dropcmds.c +++ b/src/backend/commands/dropcmds.c @@ -262,6 +262,10 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs) switch (objtype) { + case OBJECT_ACCESS_METHOD: + msg = gettext_noop("access method \"%s\" does not exist, skipping"); + name = NameListToString(objname); + break; case OBJECT_TYPE: case OBJECT_DOMAIN: { @@ -438,7 +442,7 @@ does_not_exist_skipping(ObjectType objtype, List *objname, List *objargs) } break; default: - elog(ERROR, "unexpected object type (%d)", (int) objtype); + elog(ERROR, "unrecognized object type: %d", (int) objtype); break; } diff --git a/src/test/regress/expected/drop_if_exists.out b/src/test/regress/expected/drop_if_exists.out index 6910b627c1..9cda96b6de 100644 --- a/src/test/regress/expected/drop_if_exists.out +++ b/src/test/regress/expected/drop_if_exists.out @@ -227,6 +227,11 @@ DROP OPERATOR FAMILY test_operator_family USING no_such_am; ERROR: access method "no_such_am" does not exist DROP OPERATOR FAMILY IF EXISTS test_operator_family USING no_such_am; ERROR: access method "no_such_am" does not exist +-- access method +DROP ACCESS METHOD no_such_am; +ERROR: access method "no_such_am" does not exist +DROP ACCESS METHOD IF EXISTS no_such_am; +NOTICE: access method "no_such_am" does not exist, skipping -- drop the table DROP TABLE IF EXISTS test_exists; DROP TABLE test_exists; diff --git a/src/test/regress/sql/drop_if_exists.sql b/src/test/regress/sql/drop_if_exists.sql index 03547ccae7..4ff0450731 100644 --- a/src/test/regress/sql/drop_if_exists.sql +++ b/src/test/regress/sql/drop_if_exists.sql @@ -227,6 +227,10 @@ DROP OPERATOR FAMILY IF EXISTS test_operator_family USING btree; DROP OPERATOR FAMILY test_operator_family USING no_such_am; DROP OPERATOR FAMILY IF EXISTS test_operator_family USING no_such_am; +-- access method +DROP ACCESS METHOD no_such_am; +DROP ACCESS METHOD IF EXISTS no_such_am; + -- drop the table DROP TABLE IF EXISTS test_exists;