From f3032cbe377ecc570989e1bd2fe1aea455c12cc3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 4 Mar 2008 19:54:13 +0000 Subject: Fix PREPARE TRANSACTION to reject the case where the transaction has dropped a temporary table; we can't support that because there's no way to clean up the source backend's internal state if the eventual COMMIT PREPARED is done by another backend. This was checked correctly in 8.1 but I broke it in 8.2 :-(. Patch by Heikki Linnakangas, original trouble report by John Smith. --- src/backend/access/heap/heapam.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/backend/access/heap/heapam.c') diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index c3a45b98db5..f081d2fe8f4 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.249 2008/01/30 18:35:55 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.249.2.1 2008/03/04 19:54:13 tgl Exp $ * * * INTERFACE ROUTINES @@ -868,6 +868,10 @@ relation_open(Oid relationId, LOCKMODE lockmode) if (!RelationIsValid(r)) elog(ERROR, "could not open relation with OID %u", relationId); + /* Make note that we've accessed a temporary relation */ + if (r->rd_istemp) + MyXactAccessedTempRel = true; + pgstat_initstats(r); return r; @@ -912,6 +916,10 @@ try_relation_open(Oid relationId, LOCKMODE lockmode) if (!RelationIsValid(r)) elog(ERROR, "could not open relation with OID %u", relationId); + /* Make note that we've accessed a temporary relation */ + if (r->rd_istemp) + MyXactAccessedTempRel = true; + pgstat_initstats(r); return r; @@ -958,6 +966,10 @@ relation_open_nowait(Oid relationId, LOCKMODE lockmode) if (!RelationIsValid(r)) elog(ERROR, "could not open relation with OID %u", relationId); + /* Make note that we've accessed a temporary relation */ + if (r->rd_istemp) + MyXactAccessedTempRel = true; + pgstat_initstats(r); return r; -- cgit v1.2.3