aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-11-29 00:13:21 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-11-29 00:13:21 +0000
commitb651b2a5c257945ba0ef78df22948cf805ba2b57 (patch)
tree13f5c5a7f04ad3aea869777bc7231fb42b34f4aa /src/backend
parent2a6108ac247ed27f084a25269288a2818371aec1 (diff)
downloadpostgresql-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.c13
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 &&