diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c new file mode 100644 index aecede1..44e5eab *** a/src/backend/access/transam/xlog.c --- b/src/backend/access/transam/xlog.c *************** int wal_level = WAL_LEVEL_MINIMAL; *** 100,105 **** --- 100,106 ---- int CommitDelay = 0; /* precommit delay in microseconds */ int CommitSiblings = 5; /* # concurrent xacts needed to sleep */ int wal_retrieve_retry_interval = 5000; + int JJNOWAL=0; #ifdef WAL_DEBUG bool XLOG_DEBUG = false; *************** XLogInsertRecord(XLogRecData *rdata, XLo *** 904,909 **** --- 905,916 ---- XLogRecPtr StartPos; XLogRecPtr EndPos; + if (JJNOWAL && (rechdr->xl_rmid != RM_XLOG_ID) ) { // Don't actually insert any XLOG, except the ones needed during boot strap + EndPos = SizeOfXLogLongPHD; /* start of 1st chkpt record */ + return EndPos; + }; + + /* we assume that all of the record header is in the first chunk */ Assert(rdata->len >= SizeOfXLogRecord); *************** CreateCheckPoint(int flags) *** 8268,8274 **** CHECKPOINT_FORCE)) == 0) { if (prevPtr == ControlFile->checkPointCopy.redo && ! prevPtr / XLOG_SEG_SIZE == curInsert / XLOG_SEG_SIZE) { WALInsertLockRelease(); LWLockRelease(CheckpointLock); --- 8275,8281 ---- CHECKPOINT_FORCE)) == 0) { if (prevPtr == ControlFile->checkPointCopy.redo && ! prevPtr / XLOG_SEG_SIZE == curInsert / XLOG_SEG_SIZE && !JJNOWAL) { WALInsertLockRelease(); LWLockRelease(CheckpointLock); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c new file mode 100644 index 6ac5184..dd9c0a1 *** a/src/backend/utils/misc/guc.c --- b/src/backend/utils/misc/guc.c *************** extern char *default_tablespace; *** 111,116 **** --- 111,117 ---- extern char *temp_tablespaces; extern bool ignore_checksum_failure; extern bool synchronize_seqscans; + extern int JJNOWAL; #ifdef TRACE_SYNCSCAN extern bool trace_syncscan; *************** static struct config_int ConfigureNamesI *** 1744,1749 **** --- 1745,1759 ---- 0, 0, INT_MAX, NULL, NULL, NULL }, + + { + {"JJNOWAL", PGC_USERSET, WAL_SETTINGS, + gettext_noop("turn of WAL logging, except for checkpoint/shutdown records"), + NULL + }, + &JJNOWAL, + 0, 0, 100000, NULL, NULL + }, { {"geqo_generations", PGC_USERSET, QUERY_TUNING_GEQO, gettext_noop("GEQO: number of iterations of the algorithm."),