diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile index 7ee16e8350..20834bb0ee 100644 --- a/contrib/pg_stat_statements/Makefile +++ b/contrib/pg_stat_statements/Makefile @@ -24,6 +24,8 @@ REGRESS = select dml cursors utility level_tracking planning \ # which typical installcheck users do not have (e.g. buildfarm clients). NO_INSTALLCHECK = 1 +TAP_TESTS = 1 + ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) diff --git a/contrib/pg_stat_statements/meson.build b/contrib/pg_stat_statements/meson.build index a66acaa5b8..3e42328f6c 100644 --- a/contrib/pg_stat_statements/meson.build +++ b/contrib/pg_stat_statements/meson.build @@ -60,4 +60,9 @@ tests += { # runningcheck users do not have (e.g. buildfarm clients). 'runningcheck': false, }, + 'tap': { + 'tests': [ + 't/010_restart.pl', + ], + }, } diff --git a/contrib/pg_stat_statements/t/010_restart.pl b/contrib/pg_stat_statements/t/010_restart.pl new file mode 100644 index 0000000000..83a2bf0db8 --- /dev/null +++ b/contrib/pg_stat_statements/t/010_restart.pl @@ -0,0 +1,53 @@ +# Copyright (c) 2023, PostgreSQL Global Development Group + +# Tests for checking that pg_stat_statements contents are preserved +# across restarts. + +use strict; +use warnings; +use PostgreSQL::Test::Cluster; +use PostgreSQL::Test::Utils; +use Test::More; + +my $node = PostgreSQL::Test::Cluster->new('main'); +$node->init; +$node->append_conf('postgresql.conf', + "shared_preload_libraries = 'pg_stat_statements'"); +$node->start; + +$node->safe_psql('postgres', 'CREATE EXTENSION pg_stat_statements'); + +$node->safe_psql('postgres', 'CREATE TABLE t1 (a int)'); +$node->safe_psql('postgres', 'SELECT a FROM t1'); + +is( $node->safe_psql( + 'postgres', + "SELECT query FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%' ORDER BY query" + ), + "CREATE TABLE t1 (a int)\nSELECT a FROM t1", + 'pg_stat_statements populated'); + +$node->restart; + +is( $node->safe_psql( + 'postgres', + "SELECT query FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%' ORDER BY query" + ), + "CREATE TABLE t1 (a int)\nSELECT a FROM t1", + 'pg_stat_statements data kept across restart'); + +$node->append_conf('postgresql.conf', "pg_stat_statements.save = false"); +$node->reload; + +$node->restart; + +is( $node->safe_psql( + 'postgres', + "SELECT count(*) FROM pg_stat_statements WHERE query NOT LIKE '%pg_stat_statements%'" + ), + '0', + 'pg_stat_statements data not kept across restart with .save=false'); + +$node->stop; + +done_testing();