Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2b0da03

Browse files
committed
pg_stat_statements: Add some tests for older versions still usable
When the newest version is loaded, the backend would load objects from the oldest complete SQL file (here 1.4) and then update to the latest version with transition scripts (up to 1.9 currently). This provides some coverage for upgrades of pg_stat_statements, but there is no test to show how things have changed across each version. This adds a couple of tests for the upgrade paths using objects from each version supported, stressing the objects whose behaviors have changed across each version supported. Author: Erica Zhang Reviewed-by: Julien Rouhaud, Michael Paquier Discussion: https://postgr.es/m/tencent_BBA974AFF61379F2345E782FD6C55891950A@qq.com
1 parent 795862c commit 2b0da03

File tree

3 files changed

+179
-1
lines changed

3 files changed

+179
-1
lines changed

contrib/pg_stat_statements/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ PGFILEDESC = "pg_stat_statements - execution statistics of SQL statements"
1616
LDFLAGS_SL += $(filter -lm, $(LIBS))
1717

1818
REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/pg_stat_statements/pg_stat_statements.conf
19-
REGRESS = pg_stat_statements
19+
REGRESS = pg_stat_statements oldextversions
2020
# Disabled because these tests require "shared_preload_libraries=pg_stat_statements",
2121
# which typical installcheck users do not have (e.g. buildfarm clients).
2222
NO_INSTALLCHECK = 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
-- test old extension version entry points
2+
CREATE EXTENSION pg_stat_statements WITH VERSION '1.4';
3+
-- Execution of pg_stat_statements_reset() is granted only to
4+
-- superusers in 1.4, so this fails.
5+
SET SESSION AUTHORIZATION pg_read_all_stats;
6+
SELECT pg_stat_statements_reset();
7+
ERROR: permission denied for function pg_stat_statements_reset
8+
RESET SESSION AUTHORIZATION;
9+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.5';
10+
-- Execution of pg_stat_statements_reset() should be granted to
11+
-- pg_read_all_stats now, so this works.
12+
SET SESSION AUTHORIZATION pg_read_all_stats;
13+
SELECT pg_stat_statements_reset();
14+
pg_stat_statements_reset
15+
--------------------------
16+
17+
(1 row)
18+
19+
RESET SESSION AUTHORIZATION;
20+
-- In 1.6, it got restricted back to superusers.
21+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.6';
22+
SET SESSION AUTHORIZATION pg_read_all_stats;
23+
SELECT pg_stat_statements_reset();
24+
ERROR: permission denied for function pg_stat_statements_reset
25+
RESET SESSION AUTHORIZATION;
26+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
27+
pg_get_functiondef
28+
-------------------------------------------------------------------------------
29+
CREATE OR REPLACE FUNCTION public.pg_stat_statements_reset() +
30+
RETURNS void +
31+
LANGUAGE c +
32+
PARALLEL SAFE +
33+
AS '$libdir/pg_stat_statements', $function$pg_stat_statements_reset$function$+
34+
35+
(1 row)
36+
37+
-- New function for pg_stat_statements_reset introduced, still
38+
-- restricted for non-superusers.
39+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.7';
40+
SET SESSION AUTHORIZATION pg_read_all_stats;
41+
SELECT pg_stat_statements_reset();
42+
ERROR: permission denied for function pg_stat_statements_reset
43+
RESET SESSION AUTHORIZATION;
44+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
45+
pg_get_functiondef
46+
--------------------------------------------------------------------------------------------------------------------------------
47+
CREATE OR REPLACE FUNCTION public.pg_stat_statements_reset(userid oid DEFAULT 0, dbid oid DEFAULT 0, queryid bigint DEFAULT 0)+
48+
RETURNS void +
49+
LANGUAGE c +
50+
PARALLEL SAFE STRICT +
51+
AS '$libdir/pg_stat_statements', $function$pg_stat_statements_reset_1_7$function$ +
52+
53+
(1 row)
54+
55+
\d pg_stat_statements
56+
View "public.pg_stat_statements"
57+
Column | Type | Collation | Nullable | Default
58+
---------------------+------------------+-----------+----------+---------
59+
userid | oid | | |
60+
dbid | oid | | |
61+
queryid | bigint | | |
62+
query | text | | |
63+
calls | bigint | | |
64+
total_time | double precision | | |
65+
min_time | double precision | | |
66+
max_time | double precision | | |
67+
mean_time | double precision | | |
68+
stddev_time | double precision | | |
69+
rows | bigint | | |
70+
shared_blks_hit | bigint | | |
71+
shared_blks_read | bigint | | |
72+
shared_blks_dirtied | bigint | | |
73+
shared_blks_written | bigint | | |
74+
local_blks_hit | bigint | | |
75+
local_blks_read | bigint | | |
76+
local_blks_dirtied | bigint | | |
77+
local_blks_written | bigint | | |
78+
temp_blks_read | bigint | | |
79+
temp_blks_written | bigint | | |
80+
blk_read_time | double precision | | |
81+
blk_write_time | double precision | | |
82+
83+
SELECT count(*) > 0 AS has_data FROM pg_stat_statements;
84+
has_data
85+
----------
86+
t
87+
(1 row)
88+
89+
-- New functions and views for pg_stat_statements in 1.8
90+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.8';
91+
\d pg_stat_statements
92+
View "public.pg_stat_statements"
93+
Column | Type | Collation | Nullable | Default
94+
---------------------+------------------+-----------+----------+---------
95+
userid | oid | | |
96+
dbid | oid | | |
97+
queryid | bigint | | |
98+
query | text | | |
99+
plans | bigint | | |
100+
total_plan_time | double precision | | |
101+
min_plan_time | double precision | | |
102+
max_plan_time | double precision | | |
103+
mean_plan_time | double precision | | |
104+
stddev_plan_time | double precision | | |
105+
calls | bigint | | |
106+
total_exec_time | double precision | | |
107+
min_exec_time | double precision | | |
108+
max_exec_time | double precision | | |
109+
mean_exec_time | double precision | | |
110+
stddev_exec_time | double precision | | |
111+
rows | bigint | | |
112+
shared_blks_hit | bigint | | |
113+
shared_blks_read | bigint | | |
114+
shared_blks_dirtied | bigint | | |
115+
shared_blks_written | bigint | | |
116+
local_blks_hit | bigint | | |
117+
local_blks_read | bigint | | |
118+
local_blks_dirtied | bigint | | |
119+
local_blks_written | bigint | | |
120+
temp_blks_read | bigint | | |
121+
temp_blks_written | bigint | | |
122+
blk_read_time | double precision | | |
123+
blk_write_time | double precision | | |
124+
wal_records | bigint | | |
125+
wal_fpi | bigint | | |
126+
wal_bytes | numeric | | |
127+
128+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
129+
pg_get_functiondef
130+
--------------------------------------------------------------------------------------------------------------------------------
131+
CREATE OR REPLACE FUNCTION public.pg_stat_statements_reset(userid oid DEFAULT 0, dbid oid DEFAULT 0, queryid bigint DEFAULT 0)+
132+
RETURNS void +
133+
LANGUAGE c +
134+
PARALLEL SAFE STRICT +
135+
AS '$libdir/pg_stat_statements', $function$pg_stat_statements_reset_1_7$function$ +
136+
137+
(1 row)
138+
139+
DROP EXTENSION pg_stat_statements;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
-- test old extension version entry points
2+
3+
CREATE EXTENSION pg_stat_statements WITH VERSION '1.4';
4+
-- Execution of pg_stat_statements_reset() is granted only to
5+
-- superusers in 1.4, so this fails.
6+
SET SESSION AUTHORIZATION pg_read_all_stats;
7+
SELECT pg_stat_statements_reset();
8+
RESET SESSION AUTHORIZATION;
9+
10+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.5';
11+
-- Execution of pg_stat_statements_reset() should be granted to
12+
-- pg_read_all_stats now, so this works.
13+
SET SESSION AUTHORIZATION pg_read_all_stats;
14+
SELECT pg_stat_statements_reset();
15+
RESET SESSION AUTHORIZATION;
16+
17+
-- In 1.6, it got restricted back to superusers.
18+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.6';
19+
SET SESSION AUTHORIZATION pg_read_all_stats;
20+
SELECT pg_stat_statements_reset();
21+
RESET SESSION AUTHORIZATION;
22+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
23+
24+
-- New function for pg_stat_statements_reset introduced, still
25+
-- restricted for non-superusers.
26+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.7';
27+
SET SESSION AUTHORIZATION pg_read_all_stats;
28+
SELECT pg_stat_statements_reset();
29+
RESET SESSION AUTHORIZATION;
30+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
31+
\d pg_stat_statements
32+
SELECT count(*) > 0 AS has_data FROM pg_stat_statements;
33+
34+
-- New functions and views for pg_stat_statements in 1.8
35+
AlTER EXTENSION pg_stat_statements UPDATE TO '1.8';
36+
\d pg_stat_statements
37+
SELECT pg_get_functiondef('pg_stat_statements_reset'::regproc);
38+
39+
DROP EXTENSION pg_stat_statements;

0 commit comments

Comments
 (0)