Rename "pg_clog" directory to "pg_xact".
authorRobert Haas <[email protected]>
Fri, 17 Mar 2017 13:46:58 +0000 (09:46 -0400)
committerRobert Haas <[email protected]>
Fri, 17 Mar 2017 13:48:38 +0000 (09:48 -0400)
Names containing the letters "log" sometimes confuse users into
believing that only non-critical data is present.  It is hoped
this renaming will discourage ill-considered removals of transaction
status data.

Michael Paquier

Discussion: http://postgr.es/m/CA+Tgmoa9xFQyjRZupbdEFuwUerFTvC6HjZq1ud6GYragGDFFgA@mail.gmail.com

28 files changed:
doc/src/sgml/backup.sgml
doc/src/sgml/catalogs.sgml
doc/src/sgml/config.sgml
doc/src/sgml/func.sgml
doc/src/sgml/maintenance.sgml
doc/src/sgml/ref/pg_resetwal.sgml
doc/src/sgml/ref/pg_rewind.sgml
doc/src/sgml/storage.sgml
doc/src/sgml/wal.sgml
src/backend/access/heap/heapam.c
src/backend/access/transam/README
src/backend/access/transam/clog.c
src/backend/access/transam/commit_ts.c
src/backend/access/transam/multixact.c
src/backend/access/transam/subtrans.c
src/backend/access/transam/transam.c
src/backend/access/transam/twophase.c
src/backend/access/transam/xact.c
src/backend/access/transam/xlog.c
src/backend/commands/vacuum.c
src/backend/postmaster/autovacuum.c
src/backend/storage/buffer/README
src/backend/storage/ipc/procarray.c
src/backend/utils/time/tqual.c
src/bin/initdb/initdb.c
src/bin/pg_upgrade/exec.c
src/bin/pg_upgrade/pg_upgrade.c
src/include/access/slru.h

index 69c599e18034d6ac4d040ba456a1f1353c81d756..12f2efe4e2af5b9f03978a5b85d79a99a9be4f39 100644 (file)
@@ -382,10 +382,10 @@ tar -cf backup.tar /usr/local/pgsql/data
       directories. This will <emphasis>not</> work because the
       information contained in these files is not usable without
       the commit log files,
-      <filename>pg_clog/*</filename>, which contain the commit status of
+      <filename>pg_xact/*</filename>, which contain the commit status of
       all transactions. A table file is only usable with this
       information. Of course it is also impossible to restore only a
-      table and the associated <filename>pg_clog</filename> data
+      table and the associated <filename>pg_xact</filename> data
       because that would render all other tables in the database
       cluster useless.  So file system backups only work for complete
       backup and restoration of an entire database cluster.
index 2c2da2ad8a827f0e569ff87022a83bf76f7fdeef..df0435c3f009af74791359f3397d2bdfd1c36cc2 100644 (file)
        All transaction IDs before this one have been replaced with a permanent
        (<quote>frozen</>) transaction ID in this table.  This is used to track
        whether the table needs to be vacuumed in order to prevent transaction
-       ID wraparound or to allow <literal>pg_clog</> to be shrunk.  Zero
+       ID wraparound or to allow <literal>pg_xact</> to be shrunk.  Zero
        (<symbol>InvalidTransactionId</symbol>) if the relation is not a table.
       </entry>
      </row>
        All transaction IDs before this one have been replaced with a permanent
        (<quote>frozen</>) transaction ID in this database.  This is used to
        track whether the database needs to be vacuumed in order to prevent
-       transaction ID wraparound or to allow <literal>pg_clog</> to be shrunk.
+       transaction ID wraparound or to allow <literal>pg_xact</> to be shrunk.
        It is the minimum of the per-table
        <structname>pg_class</>.<structfield>relfrozenxid</> values.
       </entry>
index b6daf9677cb8612f73960d03d464189e4e7e48ff..9963cd61a1924895955cc742fa5de4044d33466c 100644 (file)
@@ -6004,7 +6004,7 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
 
        <para>
         Vacuum also allows removal of old files from the
-        <filename>pg_clog</> subdirectory, which is why the default
+        <filename>pg_xact</> subdirectory, which is why the default
         is a relatively low 200 million transactions.
         This parameter can only be set at server start, but the setting
         can be reduced for individual tables by
index 502f99b22b34fb3cf6a914b2fbbf02cfe5b6f467..9408a255dc6b15183cc561687318a444b99a197b 100644 (file)
@@ -15616,7 +15616,7 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
  postmaster.pid  |  9
  pg_ident.conf   | 10
  global          | 11
- pg_clog         | 12
+ pg_xact         | 12
  pg_snapshots    | 13
  pg_multixact    | 14
  PG_VERSION      | 15
index f87f3e00de5b7b1ef31abf764780bcaafca45eb1..65a64c85ec012452c999c7fdba6868b9a9e4c0de 100644 (file)
    <para>
     The sole disadvantage of increasing <varname>autovacuum_freeze_max_age</>
     (and <varname>vacuum_freeze_table_age</> along with it)
-    is that the <filename>pg_clog</> subdirectory of the database cluster
+    is that the <filename>pg_xact</> subdirectory of the database cluster
     will take more space, because it must store the commit status of all
     transactions back to the <varname>autovacuum_freeze_max_age</> horizon.
     The commit status uses two bits per transaction, so if
     <varname>autovacuum_freeze_max_age</> is set to its maximum allowed
-    value of two billion, <filename>pg_clog</> can be expected to
+    value of two billion, <filename>pg_xact</> can be expected to
     grow to about half a gigabyte.  If this is trivial compared to your
     total database size, setting <varname>autovacuum_freeze_max_age</> to
     its maximum allowed value is recommended.  Otherwise, set it depending
-    on what you are willing to allow for <filename>pg_clog</> storage.
+    on what you are willing to allow for <filename>pg_xact</> storage.
     (The default, 200 million transactions, translates to about 50MB of
-    <filename>pg_clog</> storage.)
+    <filename>pg_xact</> storage.)
    </para>
 
    <para>
index 0cc6fb4c4db463e19e481913b8079f67792e06a4..0d93b56ddd25312660c433791fc72cae3773ea63 100644 (file)
@@ -256,12 +256,12 @@ PostgreSQL documentation
 
      <para>
       A safe value can be determined by looking for the numerically largest
-      file name in the directory <filename>pg_clog</> under the data directory,
+      file name in the directory <filename>pg_xact</> under the data directory,
       adding one,
       and then multiplying by 1048576 (0x100000).  Note that the file names are in
       hexadecimal.  It is usually easiest to specify the option value in
       hexadecimal too. For example, if <filename>0011</> is the largest entry
-      in <filename>pg_clog</>, <literal>-x 0x1200000</> will work (five
+      in <filename>pg_xact</>, <literal>-x 0x1200000</> will work (five
       trailing zeroes provide the proper multiplier).
      </para>
     </listitem>
index 371c4a475f60fa0c1114fa1c032335dc4eb74f77..d5430d43245992cb673653917039220c1be11632 100644 (file)
@@ -229,7 +229,7 @@ PostgreSQL documentation
     </step>
     <step>
      <para>
-      Copy all other files such as <filename>pg_clog</filename> and
+      Copy all other files such as <filename>pg_xact</filename> and
       configuration files from the source cluster to the target cluster
       (everything except the relation files).
      </para>
index e0a89861f86687e7ef333ecdca69441725a87717..a156693ec84ecc5b0fd38cbf718e7bdf4d96046e 100644 (file)
@@ -77,11 +77,6 @@ Item
  <entry>Subdirectory containing transaction commit timestamp data</entry>
 </row>
 
-<row>
- <entry><filename>pg_clog</></entry>
- <entry>Subdirectory containing transaction commit status data</entry>
-</row>
-
 <row>
  <entry><filename>pg_dynshmem</></entry>
  <entry>Subdirectory containing files used by the dynamic shared memory
@@ -151,6 +146,11 @@ Item
  <entry>Subdirectory containing WAL (Write Ahead Log) files</entry>
 </row>
 
+<row>
+ <entry><filename>pg_xact</></entry>
+ <entry>Subdirectory containing transaction commit status data</entry>
+</row>
+
 <row>
  <entry><filename>postgresql.auto.conf</></entry>
  <entry>A file used for storing configuration parameters that are set by
index 1468ba52a48777f09bb35f0a0fcdf003f9c4f6dd..a749b83dc0e66b43f9a17116e1bdedcd1fc13fd0 100644 (file)
     </listitem>
     <listitem>
      <para>
-      Internal data structures such as <filename>pg_clog</filename>, <filename>pg_subtrans</filename>, <filename>pg_multixact</filename>,
+      Internal data structures such as <filename>pg_xact</filename>, <filename>pg_subtrans</filename>, <filename>pg_multixact</filename>,
       <filename>pg_serial</filename>, <filename>pg_notify</filename>, <filename>pg_stat</filename>, <filename>pg_snapshots</filename> are not directly
       checksummed, nor are pages protected by full page writes. However, where
       such data structures are persistent, WAL records are written that allow
index bffc971d6894412b5acce3fe1f465f9a2401222f..85261379b1fadaffa88dad0964d567e9acf589fc 100644 (file)
@@ -6790,8 +6790,8 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid,
  * Note: it might seem we could make the changes without exclusive lock, since
  * TransactionId read/write is assumed atomic anyway.  However there is a race
  * condition: someone who just fetched an old XID that we overwrite here could
- * conceivably not finish checking the XID against pg_clog before we finish
- * the VACUUM and perhaps truncate off the part of pg_clog he needs.  Getting
+ * conceivably not finish checking the XID against pg_xact before we finish
+ * the VACUUM and perhaps truncate off the part of pg_xact he needs.  Getting
  * exclusive lock ensures no other backend is in process of checking the
  * tuple status.  Also, getting exclusive lock makes it safe to adjust the
  * infomask bits.
index 4ae4715339e707ab5ed879a628aa96b73002ef43..e7dd19fd7b9dcf4b7ca2d75ac5cf6d5898b43867 100644 (file)
@@ -331,17 +331,17 @@ of the xid fields is atomic, so assuming it for xmin as well is no extra
 risk.
 
 
-pg_clog and pg_subtrans
+pg_xact and pg_subtrans
 -----------------------
 
-pg_clog and pg_subtrans are permanent (on-disk) storage of transaction related
+pg_xact and pg_subtrans are permanent (on-disk) storage of transaction related
 information.  There is a limited number of pages of each kept in memory, so
 in many cases there is no need to actually read from disk.  However, if
 there's a long running transaction or a backend sitting idle with an open
 transaction, it may be necessary to be able to read and write this information
 from disk.  They also allow information to be permanent across server restarts.
 
-pg_clog records the commit status for each transaction that has been assigned
+pg_xact records the commit status for each transaction that has been assigned
 an XID.  A transaction can be in progress, committed, aborted, or
 "sub-committed".  This last state means that it's a subtransaction that's no
 longer running, but its parent has not updated its state yet.  It is not
@@ -381,9 +381,9 @@ each transaction we keep a "cache" of Xids that are known to be part of the
 transaction tree, so we can skip looking at pg_subtrans unless we know the
 cache has been overflowed.  See storage/ipc/procarray.c for the gory details.
 
-slru.c is the supporting mechanism for both pg_clog and pg_subtrans.  It
+slru.c is the supporting mechanism for both pg_xact and pg_subtrans.  It
 implements the LRU policy for in-memory buffer pages.  The high-level routines
-for pg_clog are implemented in transam.c, while the low-level functions are in
+for pg_xact are implemented in transam.c, while the low-level functions are in
 clog.c.  pg_subtrans is contained completely in subtrans.c.
 
 
index 1a43819736a5c03c407204228328087335334281..5b1d13dac1b34045d9758069312f2d9255107cc4 100644 (file)
@@ -450,7 +450,7 @@ CLOGShmemInit(void)
 {
    ClogCtl->PagePrecedes = CLOGPagePrecedes;
    SimpleLruInit(ClogCtl, "clog", CLOGShmemBuffers(), CLOG_LSNS_PER_PAGE,
-                 CLogControlLock, "pg_clog", LWTRANCHE_CLOG_BUFFERS);
+                 CLogControlLock, "pg_xact", LWTRANCHE_CLOG_BUFFERS);
 }
 
 /*
index 20f60bc02366106267a4e18d01324ff18f2aba0d..8e1df6e0eabefa798a2be9c59c1124c60db0fdc8 100644 (file)
@@ -3,7 +3,7 @@
  * commit_ts.c
  *     PostgreSQL commit timestamp manager
  *
- * This module is a pg_clog-like system that stores the commit timestamp
+ * This module is a pg_xact-like system that stores the commit timestamp
  * for each transaction.
  *
  * XLOG interactions: this module generates an XLOG record whenever a new
index c350dfa17fe54043bbfc0cef1d464d78b98705dd..1a7824b5d44dad342734d7fa6e39b0e0c96d3ce6 100644 (file)
@@ -3,7 +3,7 @@
  * multixact.c
  *     PostgreSQL multi-transaction-log manager
  *
- * The pg_multixact manager is a pg_clog-like manager that stores an array of
+ * The pg_multixact manager is a pg_xact-like manager that stores an array of
  * MultiXactMember for each MultiXactId.  It is a fundamental part of the
  * shared-row-lock implementation.  Each MultiXactMember is comprised of a
  * TransactionId and a set of flag bits.  The name is a bit historical:
index a66fc0f2ad5e775e591bb0a4ec5b889b5cfc2f29..70828e517031c4748673d0ce38ac45b85f068445 100644 (file)
@@ -3,15 +3,14 @@
  * subtrans.c
  *     PostgreSQL subtransaction-log manager
  *
- * The pg_subtrans manager is a pg_clog-like manager that stores the parent
+ * The pg_subtrans manager is a pg_xact-like manager that stores the parent
  * transaction Id for each transaction.  It is a fundamental part of the
  * nested transactions implementation.  A main transaction has a parent
  * of InvalidTransactionId, and each subtransaction has its immediate parent.
  * The tree can easily be walked from child to parent, but not in the
  * opposite direction.
  *
- * This code is based on clog.c, but the robustness requirements
- * are completely different from pg_clog, because we only need to remember
+ * are completely different from pg_xact, because we only need to remember
  * pg_subtrans information for currently-open transactions.  Thus, there is
  * no need to preserve data over a crash and restart.
  *
index c2b4318bd30a4bad2d37bab524862d03e2d42f2d..b91a259e80684231aa498af248b0e4ee2affc926 100644 (file)
@@ -224,7 +224,7 @@ TransactionIdDidAbort(TransactionId transactionId)
  *     True iff transaction associated with the identifier is currently
  *     known to have either committed or aborted.
  *
- * This does NOT look into pg_clog but merely probes our local cache
+ * This does NOT look into pg_xact but merely probes our local cache
  * (and so it's not named TransactionIdDidComplete, which would be the
  * appropriate name for a function that worked that way).  The intended
  * use is just to short-circuit TransactionIdIsInProgress calls when doing
index 83ca6e04081cf83b75a9572a3b6833376a994024..da77e3efde4610e12e6954ad0915abaf1db5f92c 100644 (file)
@@ -1379,7 +1379,7 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
    /*
     * The order of operations here is critical: make the XLOG entry for
     * commit or abort, then mark the transaction committed or aborted in
-    * pg_clog, then remove its PGPROC from the global ProcArray (which means
+    * pg_xact, then remove its PGPROC from the global ProcArray (which means
     * TransactionIdIsInProgress will stop saying the prepared xact is in
     * progress), then run the post-commit or post-abort callbacks. The
     * callbacks will release the locks the transaction held.
@@ -2093,7 +2093,7 @@ RecordTransactionCommitPrepared(TransactionId xid,
    /* Flush XLOG to disk */
    XLogFlush(recptr);
 
-   /* Mark the transaction committed in pg_clog */
+   /* Mark the transaction committed in pg_xact */
    TransactionIdCommitTree(xid, nchildren, children);
 
    /* Checkpoint can proceed now */
index 82f9a3c5c6c0c632be4ee1602240ecf85730a983..02e0779f325bad35c066a64ed2475fac0ca25a39 100644 (file)
@@ -1208,8 +1208,8 @@ RecordTransactionCommit(void)
        /*
         * Mark ourselves as within our "commit critical section".  This
         * forces any concurrent checkpoint to wait until we've updated
-        * pg_clog.  Without this, it is possible for the checkpoint to set
-        * REDO after the XLOG record but fail to flush the pg_clog update to
+        * pg_xact.  Without this, it is possible for the checkpoint to set
+        * REDO after the XLOG record but fail to flush the pg_xact update to
         * disk, leading to loss of the transaction commit if the system
         * crashes a little later.
         *
@@ -2035,7 +2035,7 @@ CommitTransaction(void)
    if (!is_parallel_worker)
    {
        /*
-        * We need to mark our XIDs as committed in pg_clog.  This is where we
+        * We need to mark our XIDs as committed in pg_xact.  This is where we
         * durably commit.
         */
        latestXid = RecordTransactionCommit();
@@ -2545,7 +2545,7 @@ AbortTransaction(void)
    AtAbort_Twophase();
 
    /*
-    * Advertise the fact that we aborted in pg_clog (assuming that we got as
+    * Advertise the fact that we aborted in pg_xact (assuming that we got as
     * far as assigning an XID to advertise).  But if we're inside a parallel
     * worker, skip this; the user backend must be the one to write the abort
     * record.
@@ -4631,7 +4631,7 @@ AbortSubTransaction(void)
                                s->parent->subTransactionId);
        AtSubAbort_Notify();
 
-       /* Advertise the fact that we aborted in pg_clog. */
+       /* Advertise the fact that we aborted in pg_xact. */
        (void) RecordTransactionAbort(true);
 
        /* Post-abort cleanup */
@@ -5375,7 +5375,7 @@ xact_redo_commit(xl_xact_parsed_commit *parsed,
    if (standbyState == STANDBY_DISABLED)
    {
        /*
-        * Mark the transaction committed in pg_clog.
+        * Mark the transaction committed in pg_xact.
         */
        TransactionIdCommitTree(xid, parsed->nsubxacts, parsed->subxacts);
    }
@@ -5393,7 +5393,7 @@ xact_redo_commit(xl_xact_parsed_commit *parsed,
        RecordKnownAssignedTransactionIds(max_xid);
 
        /*
-        * Mark the transaction committed in pg_clog. We use async commit
+        * Mark the transaction committed in pg_xact. We use async commit
         * protocol during recovery to provide information on database
         * consistency for when users try to set hint bits. It is important
         * that we do not set hint bits until the minRecoveryPoint is past
@@ -5530,7 +5530,7 @@ xact_redo_abort(xl_xact_parsed_abort *parsed, TransactionId xid)
 
    if (standbyState == STANDBY_DISABLED)
    {
-       /* Mark the transaction aborted in pg_clog, no need for async stuff */
+       /* Mark the transaction aborted in pg_xact, no need for async stuff */
        TransactionIdAbortTree(xid, parsed->nsubxacts, parsed->subxacts);
    }
    else
@@ -5546,7 +5546,7 @@ xact_redo_abort(xl_xact_parsed_abort *parsed, TransactionId xid)
         */
        RecordKnownAssignedTransactionIds(max_xid);
 
-       /* Mark the transaction aborted in pg_clog, no need for async stuff */
+       /* Mark the transaction aborted in pg_xact, no need for async stuff */
        TransactionIdAbortTree(xid, parsed->nsubxacts, parsed->subxacts);
 
        /*
index 64335f909e378c23e9c022eee0de3e35817c5601..cdb3a8ac1dc924e680409b6e5d84f8dc831d7eaf 100644 (file)
@@ -8710,7 +8710,7 @@ CreateCheckPoint(int flags)
     * that are currently in commit critical sections.  If an xact inserted
     * its commit record into XLOG just before the REDO point, then a crash
     * restart from the REDO point would not replay that record, which means
-    * that our flushing had better include the xact's update of pg_clog.  So
+    * that our flushing had better include the xact's update of pg_xact.  So
     * we wait till he's out of his commit critical section before proceeding.
     * See notes in RecordTransactionCommit().
     *
index 3b3dfeead4f99d21e9d8a1b53df8aa49ec1cbe73..ff633faca6418fcddbdcd98277bb3a032223fbd7 100644 (file)
@@ -357,7 +357,7 @@ vacuum(int options, RangeVar *relation, Oid relid, VacuumParams *params,
    if ((options & VACOPT_VACUUM) && !IsAutoVacuumWorkerProcess())
    {
        /*
-        * Update pg_database.datfrozenxid, and truncate pg_clog if possible.
+        * Update pg_database.datfrozenxid, and truncate pg_xact if possible.
         * (autovacuum.c does this for itself.)
         */
        vac_update_datfrozenxid();
@@ -910,7 +910,7 @@ vac_update_relstats(Relation relation,
  *     pg_class.relminmxid values.
  *
  *     If we are able to advance either pg_database value, also try to
- *     truncate pg_clog and pg_multixact.
+ *     truncate pg_xact and pg_multixact.
  *
  *     We violate transaction semantics here by overwriting the database's
  *     existing pg_database tuple with the new values.  This is reasonably
@@ -1056,7 +1056,7 @@ vac_update_datfrozenxid(void)
 
    /*
     * If we were able to advance datfrozenxid or datminmxid, see if we can
-    * truncate pg_clog and/or pg_multixact.  Also do it if the shared
+    * truncate pg_xact and/or pg_multixact.  Also do it if the shared
     * XID-wrap-limit info is stale, since this action will update that too.
     */
    if (dirty || ForceTransactionIdLimitUpdate())
@@ -1069,7 +1069,7 @@ vac_update_datfrozenxid(void)
  * vac_truncate_clog() -- attempt to truncate the commit log
  *
  *     Scan pg_database to determine the system-wide oldest datfrozenxid,
- *     and use it to truncate the transaction commit log (pg_clog).
+ *     and use it to truncate the transaction commit log (pg_xact).
  *     Also update the XID wrap limit info maintained by varsup.c.
  *     Likewise for datminmxid.
  *
@@ -1116,7 +1116,7 @@ vac_truncate_clog(TransactionId frozenXID,
     * of the interlock against copying a DB containing an active backend.
     * Hence the new entry will not reduce the minimum.  Also, if two VACUUMs
     * concurrently modify the datfrozenxid's of different databases, the
-    * worst possible outcome is that pg_clog is not truncated as aggressively
+    * worst possible outcome is that pg_xact is not truncated as aggressively
     * as it could be.
     */
    relation = heap_open(DatabaseRelationId, AccessShareLock);
index fa8de1390e56d65266c2118dcabf5232880dab7a..33ca749b5295ab3854456f41f31b40af056bf11b 100644 (file)
@@ -2472,7 +2472,7 @@ deleted:
     */
 
    /*
-    * Update pg_database.datfrozenxid, and truncate pg_clog if possible. We
+    * Update pg_database.datfrozenxid, and truncate pg_xact if possible. We
     * only need to do this once, not after each table.
     *
     * Even if we didn't vacuum anything, it may still be important to do
index 248883f0dae01af8e2f06d416902af7489070b26..bc80777bb106507fa5541411985dbb9c5fb92964 100644 (file)
@@ -63,7 +63,7 @@ at about the same time would OR the same bits into the field, so there
 is little or no risk of conflicting update; what's more, if there did
 manage to be a conflict it would merely mean that one bit-update would
 be lost and need to be done again later.  These four bits are only hints
-(they cache the results of transaction status lookups in pg_clog), so no
+(they cache the results of transaction status lookups in pg_xact), so no
 great harm is done if they get reset to zero by conflicting updates.
 Note, however, that a tuple is frozen by setting both HEAP_XMIN_INVALID
 and HEAP_XMIN_COMMITTED; this is a critical update and accordingly requires
index c724a0e95250c7a08761d1368e2d90a6426ac628..0f8f435faffb413f5300f04da69c47113674df4c 100644 (file)
@@ -381,7 +381,7 @@ ProcArrayRemove(PGPROC *proc, TransactionId latestXid)
  * ProcArrayEndTransaction -- mark a transaction as no longer running
  *
  * This is used interchangeably for commit and abort cases.  The transaction
- * commit/abort must already be reported to WAL and pg_clog.
+ * commit/abort must already be reported to WAL and pg_xact.
  *
  * proc is currently always MyProc, but we pass it explicitly for flexibility.
  * latestXid is the latest Xid among the transaction's main XID and
@@ -1174,7 +1174,7 @@ TransactionIdIsInProgress(TransactionId xid)
     * At this point, we know it's either a subtransaction of one of the Xids
     * in xids[], or it's not running.  If it's an already-failed
     * subtransaction, we want to say "not running" even though its parent may
-    * still be running.  So first, check pg_clog to see if it's been aborted.
+    * still be running.  So first, check pg_xact to see if it's been aborted.
     */
    xc_slow_answer_inc();
 
index 703bdcedaf406a727f11d0e33acddad1f6674581..519f3b68031af90160a9902ee3ae87943690b2c9 100644 (file)
@@ -13,9 +13,9 @@
  * NOTE: When using a non-MVCC snapshot, we must check
  * TransactionIdIsInProgress (which looks in the PGXACT array)
  * before TransactionIdDidCommit/TransactionIdDidAbort (which look in
- * pg_clog).  Otherwise we have a race condition: we might decide that a
+ * pg_xact).  Otherwise we have a race condition: we might decide that a
  * just-committed transaction crashed, because none of the tests succeed.
- * xact.c is careful to record commit/abort in pg_clog before it unsets
+ * xact.c is careful to record commit/abort in pg_xact before it unsets
  * MyPgXact->xid in the PGXACT array.  That fixes that problem, but it
  * also means there is a window where TransactionIdIsInProgress and
  * TransactionIdDidCommit will both return true.  If we check only
@@ -29,7 +29,7 @@
  *
  * When using an MVCC snapshot, we rely on XidInMVCCSnapshot rather than
  * TransactionIdIsInProgress, but the logic is otherwise the same: do not
- * check pg_clog until after deciding that the xact is no longer in progress.
+ * check pg_xact until after deciding that the xact is no longer in progress.
  *
  *
  * Summary of visibility functions:
index 9b71e0042d80094f80ff002e69cef77ca8cba553..e0c72fbb8003b4e1954e3e87ecdcf5c2bb3bbc87 100644 (file)
@@ -197,7 +197,6 @@ static const char *backend_options = "--single -F -O -j -c search_path=pg_catalo
 static const char *const subdirs[] = {
    "global",
    "pg_wal/archive_status",
-   "pg_clog",
    "pg_commit_ts",
    "pg_dynshmem",
    "pg_notify",
@@ -214,6 +213,7 @@ static const char *const subdirs[] = {
    "pg_tblspc",
    "pg_stat",
    "pg_stat_tmp",
+   "pg_xact",
    "pg_logical",
    "pg_logical/snapshots",
    "pg_logical/mappings"
index 91fa71728e8e31b0bc6b2dd29fef3c187fb282e5..cdce4be2113956715d09108e0d38a471f1633f9e 100644 (file)
@@ -338,11 +338,17 @@ check_data_dir(ClusterInfo *cluster)
    check_single_dir(pg_data, "pg_tblspc");
    check_single_dir(pg_data, "pg_twophase");
 
-   /* pg_xlog has been renamed to pg_wal in post-10 cluster */
+   /* pg_xlog has been renamed to pg_wal in v10 */
    if (GET_MAJOR_VERSION(cluster->major_version) < 1000)
        check_single_dir(pg_data, "pg_xlog");
    else
        check_single_dir(pg_data, "pg_wal");
+
+   /* pg_clog has been renamed to pg_xact in v10 */
+   if (GET_MAJOR_VERSION(cluster->major_version) < 1000)
+       check_single_dir(pg_data, "pg_clog");
+   else
+       check_single_dir(pg_data, "pg_xact");
 }
 
 
index fc66d93dd6a7a4314f028a6ae3a777d0e0c44491..ca1aa5cbb80f4e9e300cc6b2b5ad4b171760c060 100644 (file)
@@ -48,7 +48,7 @@
 static void prepare_new_cluster(void);
 static void prepare_new_databases(void);
 static void create_new_objects(void);
-static void copy_clog_xlog_xid(void);
+static void copy_xact_xlog_xid(void);
 static void set_frozenxids(bool minmxid_only);
 static void setup(char *argv0, bool *live_check);
 static void cleanup(void);
@@ -115,7 +115,7 @@ main(int argc, char **argv)
     * Destructive Changes to New Cluster
     */
 
-   copy_clog_xlog_xid();
+   copy_xact_xlog_xid();
 
    /* New now using xids of the old system */
 
@@ -376,17 +376,17 @@ remove_new_subdir(char *subdir, bool rmtopdir)
  * Copy the files from the old cluster into it
  */
 static void
-copy_subdir_files(char *subdir)
+copy_subdir_files(char *old_subdir, char *new_subdir)
 {
    char        old_path[MAXPGPATH];
    char        new_path[MAXPGPATH];
 
-   remove_new_subdir(subdir, true);
+   remove_new_subdir(new_subdir, true);
 
-   snprintf(old_path, sizeof(old_path), "%s/%s", old_cluster.pgdata, subdir);
-   snprintf(new_path, sizeof(new_path), "%s/%s", new_cluster.pgdata, subdir);
+   snprintf(old_path, sizeof(old_path), "%s/%s", old_cluster.pgdata, old_subdir);
+   snprintf(new_path, sizeof(new_path), "%s/%s", new_cluster.pgdata, new_subdir);
 
-   prep_status("Copying old %s to new server", subdir);
+   prep_status("Copying old %s to new server", old_subdir);
 
    exec_prog(UTILITY_LOG_FILE, NULL, true,
 #ifndef WIN32
@@ -401,10 +401,16 @@ copy_subdir_files(char *subdir)
 }
 
 static void
-copy_clog_xlog_xid(void)
+copy_xact_xlog_xid(void)
 {
-   /* copy old commit logs to new data dir */
-   copy_subdir_files("pg_clog");
+   /*
+    * Copy old commit logs to new data dir. pg_clog has been renamed to
+    * pg_xact in post-10 clusters.
+    */
+   copy_subdir_files(GET_MAJOR_VERSION(old_cluster.major_version) < 1000 ?
+                     "pg_clog" : "pg_xact",
+                     GET_MAJOR_VERSION(new_cluster.major_version) < 1000 ?
+                     "pg_clog" : "pg_xact");
 
    /* set the next transaction id and epoch of the new cluster */
    prep_status("Setting next transaction ID and epoch for new cluster");
@@ -434,8 +440,8 @@ copy_clog_xlog_xid(void)
    if (old_cluster.controldata.cat_ver >= MULTIXACT_FORMATCHANGE_CAT_VER &&
        new_cluster.controldata.cat_ver >= MULTIXACT_FORMATCHANGE_CAT_VER)
    {
-       copy_subdir_files("pg_multixact/offsets");
-       copy_subdir_files("pg_multixact/members");
+       copy_subdir_files("pg_multixact/offsets", "pg_multixact/offsets");
+       copy_subdir_files("pg_multixact/members", "pg_multixact/members");
 
        prep_status("Setting next multixact ID and offset for new cluster");
 
index cf6edc3bdb36ee2bf1abf3fc8a7ba429d46940ff..722867d5d2b83031c5c3b4224caea3101c0fdd2a 100644 (file)
@@ -76,7 +76,7 @@ typedef struct SlruSharedData
    /*
     * Optional array of WAL flush LSNs associated with entries in the SLRU
     * pages.  If not zero/NULL, we must flush WAL before writing pages (true
-    * for pg_clog, false for multixact, pg_subtrans, pg_notify).  group_lsn[]
+    * for pg_xact, false for multixact, pg_subtrans, pg_notify).  group_lsn[]
     * has lsn_groups_per_page entries per buffer slot, each containing the
     * highest LSN known for a contiguous group of SLRU entries on that slot's
     * page.
@@ -119,7 +119,7 @@ typedef struct SlruCtlData
    SlruShared  shared;
 
    /*
-    * This flag tells whether to fsync writes (true for pg_clog and multixact
+    * This flag tells whether to fsync writes (true for pg_xact and multixact
     * stuff, false for pg_subtrans and pg_notify).
     */
    bool        do_fsync;