diff --git a/src/test/recovery/t/013_crash_restart.pl b/src/test/recovery/t/013_crash_restart.pl index 20d648ad6af..56afb1aa6eb 100644 --- a/src/test/recovery/t/013_crash_restart.pl +++ b/src/test/recovery/t/013_crash_restart.pl @@ -21,14 +21,32 @@ my $psql_timeout = IPC::Run::timer($PostgreSQL::Test::Utils::timeout_default); my $node = PostgreSQL::Test::Cluster->new('primary'); $node->init(allows_streaming => 1); + +# Enable pg_stat_statements to test restart of shared_preload_libraries. +$node->append_conf( + 'postgresql.conf', + qq{shared_preload_libraries = 'pg_stat_statements' +pg_stat_statements.max = 50000 +compute_query_id = 'regress' +}); + $node->start(); # by default PostgreSQL::Test::Cluster doesn't restart after a crash $node->safe_psql( - 'postgres', - q[ALTER SYSTEM SET restart_after_crash = 1; - ALTER SYSTEM SET log_connections = receipt; - SELECT pg_reload_conf();]); + 'postgres', q[ + ALTER SYSTEM SET restart_after_crash = 1; + ALTER SYSTEM SET log_connections = receipt; + SELECT pg_reload_conf(); + ]); + +# Remember the time that pg_stat_statements was reset. We'll use it later to +# verify that it gets re-initialized after crash. +my $stats_reset = $node->safe_psql( + 'postgres', q[ + CREATE EXTENSION pg_stat_statements; + SELECT stats_reset FROM pg_stat_statements_info; + ]); # Run psql, keeping session alive, so we have an alive backend to kill. my ($killme_stdin, $killme_stdout, $killme_stderr) = ('', '', ''); @@ -141,6 +159,13 @@ $killme->run(); ($monitor_stdin, $monitor_stdout, $monitor_stderr) = ('', '', ''); $monitor->run(); +# Verify that pg_stat_statements, loaded via shared_preload_libraries, +# was re-initialized at the crash. +my $stats_reset_after = $node->safe_psql('postgres', + q[SELECT stats_reset FROM pg_stat_statements_info]); +cmp_ok($stats_reset, 'ne', $stats_reset_after, + "pg_stat_statements was reset by restart"); + # Acquire pid of new backend $killme_stdin .= q[