Skip to content
Snippets Groups Projects
Commit bb0aed59 authored by Tom Lane's avatar Tom Lane
Browse files

Use SnapshotNow instead of SnapshotSelf for reading the catalogs

during flat-file writing.  The only difference is that SnapshotSelf
would consider tuples of the 'current command' within the current
transaction as valid, where SnapshotNow wouldn't.  We can eliminate
the need for this with one extra CommandCounterIncrement call before
we start reading the catalogs.
parent 4aefe755
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.2 2005/02/20 04:45:59 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.3 2005/02/20 22:02:19 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -235,11 +235,9 @@ write_database_file(Relation drel)
tempname)));
/*
* Read pg_database and write the file. Note we use SnapshotSelf to
* ensure we see all effects of current transaction. (Perhaps could
* do a CommandCounterIncrement beforehand, instead?)
* Read pg_database and write the file.
*/
scan = heap_beginscan(drel, SnapshotSelf, 0, NULL);
scan = heap_beginscan(drel, SnapshotNow, 0, NULL);
while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
{
Form_pg_database dbform = (Form_pg_database) GETSTRUCT(tuple);
......@@ -349,11 +347,9 @@ write_group_file(Relation grel)
tempname)));
/*
* Read pg_group and write the file. Note we use SnapshotSelf to
* ensure we see all effects of current transaction. (Perhaps could
* do a CommandCounterIncrement beforehand, instead?)
* Read pg_group and write the file.
*/
scan = heap_beginscan(grel, SnapshotSelf, 0, NULL);
scan = heap_beginscan(grel, SnapshotNow, 0, NULL);
while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
{
Form_pg_group grpform = (Form_pg_group) GETSTRUCT(tuple);
......@@ -491,11 +487,9 @@ write_user_file(Relation urel)
tempname)));
/*
* Read pg_shadow and write the file. Note we use SnapshotSelf to
* ensure we see all effects of current transaction. (Perhaps could
* do a CommandCounterIncrement beforehand, instead?)
* Read pg_shadow and write the file.
*/
scan = heap_beginscan(urel, SnapshotSelf, 0, NULL);
scan = heap_beginscan(urel, SnapshotNow, 0, NULL);
while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
{
Form_pg_shadow pwform = (Form_pg_shadow) GETSTRUCT(tuple);
......@@ -713,6 +707,12 @@ AtEOXact_UpdateFlatFiles(bool isCommit)
return;
}
/*
* Advance command counter to be certain we see all effects of the
* current transaction.
*/
CommandCounterIncrement();
/*
* We use ExclusiveLock to ensure that only one backend writes the
* flat file(s) at a time. That's sufficient because it's okay to
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment