mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-19 20:00:51 +08:00
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.
This commit is contained in:
parent
2a6108ac24
commit
b651b2a5c2
@ -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
|
||||
@ -1412,6 +1412,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.
|
||||
*/
|
||||
|
@ -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: relation 16491 is still open
|
||||
[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]: sqlca: code: 0, state: 00000
|
||||
[NO_PID]: raising sqlstate XX000 (sqlcode -400) on line 53: relation 16491 is still open on line 53
|
||||
[NO_PID]: sqlca: code: -400, state: XX000
|
||||
sql error: relation 16491 is still open on line 53
|
||||
[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]: 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
|
||||
[NO_PID]: ecpg_finish: connection regress1 closed
|
||||
[NO_PID]: sqlca: code: 0, state: 00000
|
||||
|
Loading…
x
Reference in New Issue
Block a user