diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 47e0c9b9cf5..a090981e5c4 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -1532,14 +1532,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 8af382b9c58..54cf280d57f 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -1000,6 +1000,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 038b61e71c4..228421835d7 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: bad response - ERROR: cannot drop "my_table" because it is being used by active queries in this session +[NO_PID]: ecpg_check_PQresult on line 53: bad response - 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): 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): 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