From c0609d1af1748632532e7cd6d851744ee79a6385 Mon Sep 17 00:00:00 2001
From: Greg Sabino Mullane <greg@turnstep.com>
Date: Fri, 23 Aug 2024 09:41:32 -0400
Subject: [PATCH v2 3/4] Change initdb to default to using data checksums.

Also adjust the documentation and tests.
---
 doc/src/sgml/ref/initdb.sgml   |  2 ++
 src/bin/initdb/initdb.c        |  2 +-
 src/bin/initdb/t/001_initdb.pl | 18 ++++++++++--------
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml
index a854b32e54..afc6643412 100644
--- a/doc/src/sgml/ref/initdb.sgml
+++ b/doc/src/sgml/ref/initdb.sgml
@@ -273,6 +273,8 @@ PostgreSQL documentation
         <link linkend="monitoring-pg-stat-database-view">
         <structname>pg_stat_database</structname></link> view.
         See <xref linkend="checksums" /> for details.
+        Data checksums are enabled by default. They can be
+        disabled by use of <option>--no-data-checksums</option>.
        </para>
       </listitem>
      </varlistentry>
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 1f36e59286..1b7d867934 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -164,7 +164,7 @@ static bool noinstructions = false;
 static bool do_sync = true;
 static bool sync_only = false;
 static bool show_setting = false;
-static bool data_checksums = false;
+static bool data_checksums = true;
 static char *xlog_dir = NULL;
 static int	wal_segment_size_mb = (DEFAULT_XLOG_SEG_SIZE) / (1024 * 1024);
 static DataDirSyncMethod sync_method = DATA_DIR_SYNC_METHOD_FSYNC;
diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl
index 8072adb97f..7520d3d0dd 100644
--- a/src/bin/initdb/t/001_initdb.pl
+++ b/src/bin/initdb/t/001_initdb.pl
@@ -69,16 +69,11 @@ mkdir $datadir;
 	}
 }
 
-# Control file should tell that data checksums are disabled by default.
+# Control file should tell that data checksums are enabled by default.
 command_like(
 	[ 'pg_controldata', $datadir ],
-	qr/Data page checksum version:.*0/,
-	'checksums are disabled in control file');
-# pg_checksums fails with checksums disabled by default.  This is
-# not part of the tests included in pg_checksums to save from
-# the creation of an extra instance.
-command_fails([ 'pg_checksums', '-D', $datadir ],
-	"pg_checksums fails with data checksum disabled");
+	qr/Data page checksum version:.*1/,
+	'checksums are enabled in control file');
 
 command_ok([ 'initdb', '-S', $datadir ], 'sync only');
 command_fails([ 'initdb', $datadir ], 'existing data directory');
@@ -280,4 +275,11 @@ command_like(
 	qr/Data page checksum version:.*0/,
 	'checksums are disabled in control file');
 
+# pg_checksums fails with checksums disabled. This is
+# not part of the tests included in pg_checksums to save from
+# the creation of an extra instance.
+command_fails(
+	[ 'pg_checksums', '-D', $datadir_nochecksums ],
+	"pg_checksums fails with data checksum disabled");
+
 done_testing();
-- 
2.30.2

