initdb: Change default to using data checksums.

Checksums are now on by default.  They can be disabled by the
previously added option --no-data-checksums.

Author: Greg Sabino Mullane <greg@turnstep.com>
Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Discussion: https://www.postgresql.org/message-id/flat/CAKAnmmKwiMHik5AHmBEdf5vqzbOBbcwEPHo4-PioWeAbzwcTOQ@mail.gmail.com
This commit is contained in:
Peter Eisentraut 2024-10-16 08:45:09 +02:00
parent 67846550dc
commit 04bec894a0
3 changed files with 21 additions and 14 deletions

View File

@ -265,8 +265,14 @@ PostgreSQL documentation
<term><option>--data-checksums</option></term>
<listitem>
<para>
Use checksums on data pages to help detect corruption by the
I/O system that would otherwise be silent. Enabling checksums
Use checksums on data pages to help detect corruption by the I/O
system that would otherwise be silent. This is enabled by default;
use <xref linkend="app-initdb-no-data-checksums"/> to disable
checksums.
</para>
<para>
Enabling checksums
might incur a small performance penalty. If set, checksums
are calculated for all objects, in all databases. All checksum
failures will be reported in the
@ -343,12 +349,11 @@ PostgreSQL documentation
</listitem>
</varlistentry>
<varlistentry id="app-initdb-no-data-checksums" xreflabel="no data checksums">
<varlistentry id="app-initdb-no-data-checksums">
<term><option>--no-data-checksums</option></term>
<listitem>
<para>
Do not enable data checksums. This can be used to override a
<option>--data-checksums</option> option.
Do not enable data checksums.
</para>
</listitem>
</varlistentry>

View File

@ -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;

View File

@ -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();