1
1
CREATE EXTENSION pg_walinspect;
2
2
3
+ -- Mask DETAIL messages as these could refer to current LSN positions.
4
+ \set VERBOSITY terse
5
+
3
6
-- Make sure checkpoints don't interfere with the test.
4
7
SELECT ' init' FROM pg_create_physical_replication_slot(' regress_pg_walinspect_slot' , true, false);
5
8
6
9
CREATE TABLE sample_tbl (col1 int , col2 int );
7
10
11
+ -- Save some LSNs for comparisons
8
12
SELECT pg_current_wal_lsn() AS wal_lsn1 \gset
9
-
10
13
INSERT INTO sample_tbl SELECT * FROM generate_series(1 , 2 );
11
-
12
14
SELECT pg_current_wal_lsn() AS wal_lsn2 \gset
13
-
14
15
INSERT INTO sample_tbl SELECT * FROM generate_series(3 , 4 );
15
16
16
17
-- ===================================================================
17
18
-- Tests for input validation
18
19
-- ===================================================================
19
20
20
- SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info(:' wal_lsn2' , :' wal_lsn1' ); -- ERROR
21
-
22
- SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats(:' wal_lsn2' , :' wal_lsn1' ); -- ERROR
21
+ -- Invalid input LSN.
22
+ SELECT * FROM pg_get_wal_record_info(' 0/0' );
23
+
24
+ -- Invalid start LSN.
25
+ SELECT * FROM pg_get_wal_records_info(' 0/0' , :' wal_lsn1' );
26
+ SELECT * FROM pg_get_wal_stats(' 0/0' , :' wal_lsn1' );
27
+ SELECT * FROM pg_get_wal_block_info(' 0/0' , :' wal_lsn1' );
28
+
29
+ -- Start LSN > End LSN.
30
+ SELECT * FROM pg_get_wal_records_info(:' wal_lsn2' , :' wal_lsn1' );
31
+ SELECT * FROM pg_get_wal_stats(:' wal_lsn2' , :' wal_lsn1' );
32
+ SELECT * FROM pg_get_wal_block_info(:' wal_lsn2' , :' wal_lsn1' );
33
+
34
+ -- LSNs with the highest value possible.
35
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_record_info(' FFFFFFFF/FFFFFFFF' );
36
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info_till_end_of_wal(' FFFFFFFF/FFFFFFFF' );
37
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats_till_end_of_wal(' FFFFFFFF/FFFFFFFF' );
38
+ -- failures with end LSNs
39
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info(:' wal_lsn1' , ' FFFFFFFF/FFFFFFFF' );
40
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats(:' wal_lsn1' , ' FFFFFFFF/FFFFFFFF' );
41
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_block_info(:' wal_lsn1' , ' FFFFFFFF/FFFFFFFF' );
42
+ -- failures with start LSNs
43
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info(' FFFFFFFF/FFFFFFFE' , ' FFFFFFFF/FFFFFFFF' );
44
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats(' FFFFFFFF/FFFFFFFE' , ' FFFFFFFF/FFFFFFFF' );
45
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_block_info(' FFFFFFFF/FFFFFFFE' , ' FFFFFFFF/FFFFFFFF' );
23
46
24
47
-- ===================================================================
25
48
-- Tests for all function executions
26
49
-- ===================================================================
27
50
28
51
SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_record_info(:' wal_lsn1' );
29
-
30
- SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info(:' wal_lsn1' , :' wal_lsn2' );
31
-
32
52
SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:' wal_lsn1' );
33
-
34
- SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats(:' wal_lsn1' , :' wal_lsn2' );
35
-
36
53
SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats_till_end_of_wal(:' wal_lsn1' );
54
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_records_info(:' wal_lsn1' , :' wal_lsn2' );
55
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_stats(:' wal_lsn1' , :' wal_lsn2' );
56
+ SELECT COUNT (* ) >= 0 AS ok FROM pg_get_wal_block_info(:' wal_lsn1' , :' wal_lsn2' );
37
57
38
58
-- ===================================================================
39
59
-- Test for filtering out WAL records of a particular table
@@ -80,29 +100,22 @@ CREATE ROLE regress_pg_walinspect;
80
100
81
101
SELECT has_function_privilege(' regress_pg_walinspect' ,
82
102
' pg_get_wal_record_info(pg_lsn)' , ' EXECUTE' ); -- no
83
-
84
103
SELECT has_function_privilege(' regress_pg_walinspect' ,
85
104
' pg_get_wal_records_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- no
86
-
87
105
SELECT has_function_privilege(' regress_pg_walinspect' ,
88
106
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- no
89
-
90
107
SELECT has_function_privilege(' regress_pg_walinspect' ,
91
108
' pg_get_wal_block_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- no
92
109
93
110
-- Functions accessible by users with role pg_read_server_files
94
111
95
112
GRANT pg_read_server_files TO regress_pg_walinspect;
96
-
97
113
SELECT has_function_privilege(' regress_pg_walinspect' ,
98
114
' pg_get_wal_record_info(pg_lsn)' , ' EXECUTE' ); -- yes
99
-
100
115
SELECT has_function_privilege(' regress_pg_walinspect' ,
101
116
' pg_get_wal_records_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
102
-
103
117
SELECT has_function_privilege(' regress_pg_walinspect' ,
104
118
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
105
-
106
119
SELECT has_function_privilege(' regress_pg_walinspect' ,
107
120
' pg_get_wal_block_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
108
121
@@ -111,37 +124,28 @@ REVOKE pg_read_server_files FROM regress_pg_walinspect;
111
124
-- Superuser can grant execute to other users
112
125
GRANT EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn)
113
126
TO regress_pg_walinspect;
114
-
115
127
GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
116
128
TO regress_pg_walinspect;
117
-
118
129
GRANT EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
119
130
TO regress_pg_walinspect;
120
-
121
131
GRANT EXECUTE ON FUNCTION pg_get_wal_block_info(pg_lsn, pg_lsn)
122
132
TO regress_pg_walinspect;
123
133
124
134
SELECT has_function_privilege(' regress_pg_walinspect' ,
125
135
' pg_get_wal_record_info(pg_lsn)' , ' EXECUTE' ); -- yes
126
-
127
136
SELECT has_function_privilege(' regress_pg_walinspect' ,
128
137
' pg_get_wal_records_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
129
-
130
138
SELECT has_function_privilege(' regress_pg_walinspect' ,
131
139
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
132
-
133
140
SELECT has_function_privilege(' regress_pg_walinspect' ,
134
141
' pg_get_wal_block_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
135
142
136
143
REVOKE EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn)
137
144
FROM regress_pg_walinspect;
138
-
139
145
REVOKE EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
140
146
FROM regress_pg_walinspect;
141
-
142
147
REVOKE EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
143
148
FROM regress_pg_walinspect;
144
-
145
149
REVOKE EXECUTE ON FUNCTION pg_get_wal_block_info(pg_lsn, pg_lsn)
146
150
FROM regress_pg_walinspect;
147
151
@@ -154,3 +158,4 @@ DROP ROLE regress_pg_walinspect;
154
158
SELECT pg_drop_replication_slot(' regress_pg_walinspect_slot' );
155
159
156
160
DROP TABLE sample_tbl;
161
+ DROP EXTENSION pg_walinspect;
0 commit comments