mirror of
https://github.com/postgres/postgres.git
synced 2025-07-12 21:01:52 +03:00
Revert patch for taking fewer snapshots.
This reverts commit d573e239f0
, "Take fewer
snapshots". While that seemed like a good idea at the time, it caused
execution to use a snapshot that had been acquired before locking any of
the tables mentioned in the query. This created user-visible anomalies
that were not present in any prior release of Postgres, as reported by
Tomas Vondra. While this whole area could do with a redesign (since there
are related cases that have anomalies anyway), it doesn't seem likely that
any future patch would be reasonably back-patchable; and we don't want 9.2
to exhibit a behavior that's subtly unlike either past or future releases.
Hence, revert to prior code while we rethink the problem.
This commit is contained in:
@ -447,18 +447,17 @@ FetchStatementTargetList(Node *stmt)
|
||||
* currently only honored for PORTAL_ONE_SELECT portals). Most callers
|
||||
* should simply pass zero.
|
||||
*
|
||||
* The use_active_snapshot parameter is currently used only for
|
||||
* PORTAL_ONE_SELECT portals. If it is true, the active snapshot will
|
||||
* be used when starting up the executor; if false, a new snapshot will
|
||||
* be taken. This is used both for cursors and to avoid taking an entirely
|
||||
* new snapshot when it isn't necessary.
|
||||
* The caller can optionally pass a snapshot to be used; pass InvalidSnapshot
|
||||
* for the normal behavior of setting a new snapshot. This parameter is
|
||||
* presently ignored for non-PORTAL_ONE_SELECT portals (it's only intended
|
||||
* to be used for cursors).
|
||||
*
|
||||
* On return, portal is ready to accept PortalRun() calls, and the result
|
||||
* tupdesc (if any) is known.
|
||||
*/
|
||||
void
|
||||
PortalStart(Portal portal, ParamListInfo params,
|
||||
int eflags, bool use_active_snapshot)
|
||||
int eflags, Snapshot snapshot)
|
||||
{
|
||||
Portal saveActivePortal;
|
||||
ResourceOwner saveResourceOwner;
|
||||
@ -500,8 +499,8 @@ PortalStart(Portal portal, ParamListInfo params,
|
||||
case PORTAL_ONE_SELECT:
|
||||
|
||||
/* Must set snapshot before starting executor. */
|
||||
if (use_active_snapshot)
|
||||
PushActiveSnapshot(GetActiveSnapshot());
|
||||
if (snapshot)
|
||||
PushActiveSnapshot(snapshot);
|
||||
else
|
||||
PushActiveSnapshot(GetTransactionSnapshot());
|
||||
|
||||
|
Reference in New Issue
Block a user