summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/regress.sgml34
-rw-r--r--src/test/perl/PostgreSQL/Test/Cluster.pm7
-rw-r--r--src/test/regress/pg_regress.c7
3 files changed, 40 insertions, 8 deletions
diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 70d9bdefe1b..6a27aae3195 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -390,12 +390,37 @@ make check LANG=C ENCODING=EUC_JP
<title>Custom Server Settings</title>
<para>
- Custom server settings to use when running a regression test suite can be
+ There are several ways to use custom server settings when running a test
+ suite. This can be useful to enable additional logging, adjust resource
+ limits, or enable extra run-time checks such as <xref
+ linkend="guc-debug-discard-caches"/>. But note that not all tests can be
+ expected to pass cleanly with arbitrary settings.
+ </para>
+
+ <para>
+ Extra options can be passed to the various <command>initdb</command>
+ commands that are run internally during test setup using the environment
+ variable <envar>PG_TEST_INITDB_EXTRA_OPTS</envar>. For example, to run a
+ test with checksums enabled and a custom WAL segment size and
+ <varname>work_mem</varname> setting, use:
+<screen>
+make check PG_TEST_INITDB_EXTRA_OPTS='-k --wal-segsize=4 -c work_mem=50MB'
+</screen>
+ </para>
+
+ <para>
+ For the core regression test suite and other tests driven by
+ <command>pg_regress</command>, custom run-time server settings can also be
set in the <varname>PGOPTIONS</varname> environment variable (for settings
- that allow this):
+ that allow this), for example:
<screen>
make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"
</screen>
+ (This makes use of functionality provided by libpq; see <xref
+ linkend="libpq-connect-options"/> for details.)
+ </para>
+
+ <para>
When running against a temporary installation, custom settings can also be
set by supplying a pre-written <filename>postgresql.conf</filename>:
<screen>
@@ -405,11 +430,6 @@ make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
</screen>
</para>
- <para>
- This can be useful to enable additional logging, adjust resource limits,
- or enable extra run-time checks such as <xref
- linkend="guc-debug-discard-caches"/>.
- </para>
</sect2>
<sect2 id="regress-run-extra-tests">
diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm
index e2e70d0dbf9..07da74cf562 100644
--- a/src/test/perl/PostgreSQL/Test/Cluster.pm
+++ b/src/test/perl/PostgreSQL/Test/Cluster.pm
@@ -114,6 +114,7 @@ use Socket;
use Test::More;
use PostgreSQL::Test::Utils ();
use PostgreSQL::Test::BackgroundPsql ();
+use Text::ParseWords qw(shellwords);
use Time::HiRes qw(usleep);
use Scalar::Util qw(blessed);
@@ -519,6 +520,12 @@ sub init
$params{allows_streaming} = 0 unless defined $params{allows_streaming};
$params{has_archiving} = 0 unless defined $params{has_archiving};
+ my $initdb_extra_opts_env = $ENV{PG_TEST_INITDB_EXTRA_OPTS};
+ if (defined $initdb_extra_opts_env)
+ {
+ push @{ $params{extra} }, shellwords($initdb_extra_opts_env);
+ }
+
mkdir $self->backup_dir;
mkdir $self->archive_dir;
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index c894005dac0..f1f6011ae0a 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -2306,6 +2306,7 @@ regression_main(int argc, char *argv[],
const char *keywords[4];
const char *values[4];
PGPing rv;
+ const char *initdb_extra_opts_env;
/*
* Prepare the temp instance
@@ -2327,6 +2328,8 @@ regression_main(int argc, char *argv[],
if (!directory_exists(buf))
make_directory(buf);
+ initdb_extra_opts_env = getenv("PG_TEST_INITDB_EXTRA_OPTS");
+
initStringInfo(&cmd);
/*
@@ -2339,7 +2342,7 @@ regression_main(int argc, char *argv[],
* duplicate it until we require perl at build time.
*/
initdb_template_dir = getenv("INITDB_TEMPLATE");
- if (initdb_template_dir == NULL || nolocale || debug)
+ if (initdb_template_dir == NULL || nolocale || debug || initdb_extra_opts_env)
{
note("initializing database system by running initdb");
@@ -2352,6 +2355,8 @@ regression_main(int argc, char *argv[],
appendStringInfoString(&cmd, " --debug");
if (nolocale)
appendStringInfoString(&cmd, " --no-locale");
+ if (initdb_extra_opts_env)
+ appendStringInfo(&cmd, " %s", initdb_extra_opts_env);
appendStringInfo(&cmd, " > \"%s/log/initdb.log\" 2>&1", outputdir);
fflush(NULL);
if (system(cmd.data))