mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Simplify restriction handling of two-phase commit for temporary objects
There were two flags used to track the access to temporary tables and to the temporary namespace of a session which are used to restrict PREPARE TRANSACTION, however the first control flag is a concept included in the second. This removes the flag for temporary table tracking, keeping around only the one at namespace level. Author: Michael Paquier Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/20190118053126.GH1883@paquier.xyz
This commit is contained in:
@ -2266,6 +2266,11 @@ PrepareTransaction(void)
|
||||
* clean up the source backend's local buffers and ON COMMIT state if the
|
||||
* prepared xact includes a DROP of a temp table.
|
||||
*
|
||||
* Other objects types, like functions, operators or extensions, share the
|
||||
* same restriction as they should not be created, locked or dropped as
|
||||
* this can mess up with this session or even a follow-up session trying
|
||||
* to use the same temporary namespace.
|
||||
*
|
||||
* We must check this after executing any ON COMMIT actions, because they
|
||||
* might still access a temp relation.
|
||||
*
|
||||
@ -2273,22 +2278,10 @@ PrepareTransaction(void)
|
||||
* cases, such as a temp table created and dropped all within the
|
||||
* transaction. That seems to require much more bookkeeping though.
|
||||
*/
|
||||
if ((MyXactFlags & XACT_FLAGS_ACCESSEDTEMPREL))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot PREPARE a transaction that has operated on temporary tables")));
|
||||
|
||||
/*
|
||||
* Similarly, PREPARE TRANSACTION is not allowed if the temporary
|
||||
* namespace has been involved in this transaction as we cannot allow it
|
||||
* to create, lock, or even drop objects within the temporary namespace
|
||||
* as this can mess up with this session or even a follow-up session
|
||||
* trying to use the same temporary namespace.
|
||||
*/
|
||||
if ((MyXactFlags & XACT_FLAGS_ACCESSEDTEMPNAMESPACE))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot PREPARE a transaction that has operated on temporary namespace")));
|
||||
errmsg("cannot PREPARE a transaction that has operated on temporary objects")));
|
||||
|
||||
/*
|
||||
* Likewise, don't allow PREPARE after pg_export_snapshot. This could be
|
||||
|
Reference in New Issue
Block a user