diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index f4cf829b46..5dc90660de 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -1426,14 +1426,10 @@ heap_drop_with_catalog(Oid relid) /* * There can no longer be anyone *else* touching the relation, but we - * might still have open queries or cursors in our own session. + * might still have open queries or cursors, or pending trigger events, + * in our own session. */ - if (rel->rd_refcnt != 1) - ereport(ERROR, - (errcode(ERRCODE_OBJECT_IN_USE), - errmsg("cannot drop \"%s\" because " - "it is being used by active queries in this session", - RelationGetRelationName(rel)))); + CheckTableNotInUse(rel, "DROP TABLE"); /* * Schedule unlinking of the relation's physical files at commit. diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index f4087fedd0..73b5e6b91c 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -910,6 +910,12 @@ index_drop(Oid indexId) userIndexRelation = index_open(indexId, AccessExclusiveLock); + /* + * There can no longer be anyone *else* touching the index, but we + * might still have open queries using it in our own session. + */ + CheckTableNotInUse(userIndexRelation, "DROP INDEX"); + /* * Schedule physical removal of the files */ diff --git a/src/interfaces/ecpg/test/expected/sql-fetch.stderr b/src/interfaces/ecpg/test/expected/sql-fetch.stderr index 4a9d331464..8eae2b2052 100644 --- a/src/interfaces/ecpg/test/expected/sql-fetch.stderr +++ b/src/interfaces/ecpg/test/expected/sql-fetch.stderr @@ -138,10 +138,10 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 53: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_check_PQresult on line 53: ERROR: cannot drop "my_table" because it is being used by active queries in this session +[NO_PID]: ecpg_check_PQresult on line 53: ERROR: cannot DROP TABLE "my_table" because it is being used by active queries in this session [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlstate 55006 (sqlcode -400) on line 53: cannot drop "my_table" because it is being used by active queries in this session on line 53 +[NO_PID]: raising sqlstate 55006 (sqlcode -400) on line 53: cannot DROP TABLE "my_table" because it is being used by active queries in this session on line 53 [NO_PID]: sqlca: code: -400, state: 55006 -SQL error: cannot drop "my_table" because it is being used by active queries in this session on line 53 +SQL error: cannot DROP TABLE "my_table" because it is being used by active queries in this session on line 53 [NO_PID]: ecpg_finish: connection regress1 closed [NO_PID]: sqlca: code: 0, state: 00000