diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-29 00:13:21 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-11-29 00:13:21 +0000 |
commit | b651b2a5c257945ba0ef78df22948cf805ba2b57 (patch) | |
tree | 13f5c5a7f04ad3aea869777bc7231fb42b34f4aa /src/backend | |
parent | 2a6108ac247ed27f084a25269288a2818371aec1 (diff) | |
download | postgresql-b651b2a5c257945ba0ef78df22948cf805ba2b57.tar.gz postgresql-b651b2a5c257945ba0ef78df22948cf805ba2b57.zip |
Make sure we give an appropriate user-facing error when attempting
to drop a table that is referenced by an open cursor. Fix unstable
ecpg regression test result that was produced by this oversight.
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/catalog/heap.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index c2239cd3d22..a711143f86c 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.346 2008/11/27 15:59:28 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.347 2008/11/29 00:13:21 tgl Exp $ * * * INTERFACE ROUTINES @@ -1413,6 +1413,17 @@ heap_drop_with_catalog(Oid relid) rel = relation_open(relid, AccessExclusiveLock); /* + * There can no longer be anyone *else* touching the relation, but we + * might still have open queries or cursors 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)))); + + /* * Schedule unlinking of the relation's physical files at commit. */ if (rel->rd_rel->relkind != RELKIND_VIEW && |