diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-05-27 11:03:18 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-05-27 11:03:18 -0400 |
commit | 83dbde94f726f2517a79b1cea59e57452c36e734 (patch) | |
tree | f2e6f5e3d161528894330c461f473bea3c6264aa | |
parent | 9dd4178cec3ffd825a4bef558632b7cba3e426c5 (diff) | |
download | postgresql-83dbde94f726f2517a79b1cea59e57452c36e734.tar.gz postgresql-83dbde94f726f2517a79b1cea59e57452c36e734.zip |
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>
-rw-r--r-- | src/backend/commands/dropcmds.c | 6 | ||||
-rw-r--r-- | src/test/regress/expected/drop_if_exists.out | 5 | ||||
-rw-r--r-- | src/test/regress/sql/drop_if_exists.sql | 4 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/backend/commands/dropcmds.c b/src/backend/commands/dropcmds.c index 522027ac3ee..61ff8f2190d 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 6910b627c15..9cda96b6dea 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 03547ccae7a..4ff04507311 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; |