pg_stat_statements: Add TAP test for testing restarts
authorPeter Eisentraut <[email protected]>
Sat, 30 Dec 2023 18:55:32 +0000 (19:55 +0100)
committerPeter Eisentraut <[email protected]>
Sat, 30 Dec 2023 19:18:23 +0000 (20:18 +0100)
This tests that pg_stat_statement contents are successfully kept
across restart.  (This similar to
src/test/recovery/t/029_stats_restart.pl for the stats collector.)

Reviewed-by: Michael Paquier <[email protected]>
Reviewed-by: Julien Rouhaud <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/40d1e4f2-835f-448f-a541-8ff5db75bf3d@eisentraut.org

contrib/pg_stat_statements/Makefile
contrib/pg_stat_statements/meson.build
contrib/pg_stat_statements/t/010_restart.pl [new file with mode: 0644]

index 7ee16e83509145b98226daed6891dbb56b080da8..20834bb0ee42a28526850eec8b7c964ed49a33a4 100644 (file)
@@ -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)
index a66acaa5b888d8d59438be5e26e454e69b86480b..3e42328f6c59e9337cdb77365b1f6ecff68b007b 100644 (file)
@@ -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 (file)
index 0000000..83a2bf0
--- /dev/null
@@ -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();