mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Teach CLUSTER to skip writing WAL if not needed (ie, not using archiving)
--- Simon. Also, code review and cleanup for the previous COPY-no-WAL patches --- Tom.
This commit is contained in:
@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.157 2007/03/13 00:33:39 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.158 2007/03/29 00:15:37 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -653,6 +653,8 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
|
||||
char *nulls;
|
||||
IndexScanDesc scan;
|
||||
HeapTuple tuple;
|
||||
CommandId mycid = GetCurrentCommandId();
|
||||
bool use_wal;
|
||||
|
||||
/*
|
||||
* Open the relations we need.
|
||||
@ -675,6 +677,17 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
|
||||
nulls = (char *) palloc(natts * sizeof(char));
|
||||
memset(nulls, 'n', natts * sizeof(char));
|
||||
|
||||
/*
|
||||
* We need to log the copied data in WAL iff WAL archiving is enabled AND
|
||||
* it's not a temp rel. (Since we know the target relation is new and
|
||||
* can't have any FSM data, we can always tell heap_insert to ignore FSM,
|
||||
* even when using WAL.)
|
||||
*/
|
||||
use_wal = XLogArchivingActive() && !NewHeap->rd_istemp;
|
||||
|
||||
/* use_wal off requires rd_targblock be initially invalid */
|
||||
Assert(NewHeap->rd_targblock == InvalidBlockNumber);
|
||||
|
||||
/*
|
||||
* Scan through the OldHeap on the OldIndex and copy each tuple into the
|
||||
* NewHeap.
|
||||
@ -722,7 +735,7 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
|
||||
if (NewHeap->rd_rel->relhasoids)
|
||||
HeapTupleSetOid(copiedTuple, HeapTupleGetOid(tuple));
|
||||
|
||||
simple_heap_insert(NewHeap, copiedTuple);
|
||||
heap_insert(NewHeap, copiedTuple, mycid, use_wal, false);
|
||||
|
||||
heap_freetuple(copiedTuple);
|
||||
|
||||
@ -734,6 +747,9 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
|
||||
pfree(values);
|
||||
pfree(nulls);
|
||||
|
||||
if (!use_wal)
|
||||
heap_sync(NewHeap);
|
||||
|
||||
index_close(OldIndex, NoLock);
|
||||
heap_close(OldHeap, NoLock);
|
||||
heap_close(NewHeap, NoLock);
|
||||
|
Reference in New Issue
Block a user