aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/cluster.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-01-20 19:43:40 +0000
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-01-20 19:43:40 +0000
commit09b115f70684ea20dc344faab1a96f2831d3ee75 (patch)
tree97ee9e81891d786e815ebc0e7e69a293f212fd5d /src/backend/commands/cluster.c
parent47ce95a7b98ff06b51f12a7381fc3788dff9961c (diff)
downloadpostgresql-09b115f70684ea20dc344faab1a96f2831d3ee75.tar.gz
postgresql-09b115f70684ea20dc344faab1a96f2831d3ee75.zip
Write a WAL record whenever we perform an operation without WAL-logging
that would've been WAL-logged if archiving was enabled. If we encounter such records in archive recovery anyway, we know that some data is missing from the log. A WARNING is emitted in that case. Original patch by Fujii Masao, with changes by me.
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r--src/backend/commands/cluster.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 913ba1681c5..56d040590ba 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.193 2010/01/15 09:19:01 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.194 2010/01/20 19:43:40 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -821,6 +821,18 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex,
*/
use_wal = XLogIsNeeded() && !NewHeap->rd_istemp;
+ /*
+ * Write an XLOG UNLOGGED record if WAL-logging was skipped because
+ * WAL archiving is not enabled.
+ */
+ if (!use_wal && !NewHeap->rd_istemp)
+ {
+ char reason[NAMEDATALEN + 20];
+ snprintf(reason, sizeof(reason), "CLUSTER on \"%s\"",
+ RelationGetRelationName(NewHeap));
+ XLogReportUnloggedStatement(reason);
+ }
+
/* use_wal off requires rd_targblock be initially invalid */
Assert(NewHeap->rd_targblock == InvalidBlockNumber);