@@ -11,7 +11,7 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2);
11
11
12
12
SELECT pg_current_wal_lsn() AS wal_lsn2 \gset
13
13
14
- INSERT INTO sample_tbl SELECT * FROM generate_series(1 , 2 );
14
+ INSERT INTO sample_tbl SELECT * FROM generate_series(3 , 4 );
15
15
16
16
-- ===================================================================
17
17
-- Tests for input validation
@@ -52,6 +52,22 @@ SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'
52
52
SELECT COUNT (* ) >= 1 AS ok FROM pg_get_wal_records_info(:' wal_lsn1' , :' wal_lsn2' )
53
53
WHERE resource_manager = ' Heap' AND record_type = ' INSERT' ;
54
54
55
+ -- ===================================================================
56
+ -- Tests to get full page image (FPI) from WAL record
57
+ -- ===================================================================
58
+ SELECT pg_current_wal_lsn() AS wal_lsn3 \gset
59
+
60
+ -- Force FPI on the next update.
61
+ CHECKPOINT;
62
+
63
+ -- Update table to generate an FPI.
64
+ UPDATE sample_tbl SET col1 = col1 * 100 WHERE col1 = 1 ;
65
+ SELECT pg_current_wal_lsn() AS wal_lsn4 \gset
66
+
67
+ -- Check if we get FPI from WAL record.
68
+ SELECT COUNT (* ) >= 1 AS ok FROM pg_get_wal_fpi_info(:' wal_lsn3' , :' wal_lsn4' )
69
+ WHERE relfilenode = :' sample_tbl_oid' ;
70
+
55
71
-- ===================================================================
56
72
-- Tests for permissions
57
73
-- ===================================================================
@@ -66,6 +82,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
66
82
SELECT has_function_privilege(' regress_pg_walinspect' ,
67
83
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- no
68
84
85
+ SELECT has_function_privilege(' regress_pg_walinspect' ,
86
+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- no
87
+
69
88
-- Functions accessible by users with role pg_read_server_files
70
89
71
90
GRANT pg_read_server_files TO regress_pg_walinspect;
@@ -79,6 +98,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
79
98
SELECT has_function_privilege(' regress_pg_walinspect' ,
80
99
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
81
100
101
+ SELECT has_function_privilege(' regress_pg_walinspect' ,
102
+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
103
+
82
104
REVOKE pg_read_server_files FROM regress_pg_walinspect;
83
105
84
106
-- Superuser can grant execute to other users
@@ -91,6 +113,9 @@ GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
91
113
GRANT EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
92
114
TO regress_pg_walinspect;
93
115
116
+ GRANT EXECUTE ON FUNCTION pg_get_wal_fpi_info(pg_lsn, pg_lsn)
117
+ TO regress_pg_walinspect;
118
+
94
119
SELECT has_function_privilege(' regress_pg_walinspect' ,
95
120
' pg_get_wal_record_info(pg_lsn)' , ' EXECUTE' ); -- yes
96
121
@@ -100,6 +125,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
100
125
SELECT has_function_privilege(' regress_pg_walinspect' ,
101
126
' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
102
127
128
+ SELECT has_function_privilege(' regress_pg_walinspect' ,
129
+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
130
+
103
131
REVOKE EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn)
104
132
FROM regress_pg_walinspect;
105
133
@@ -109,6 +137,9 @@ REVOKE EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
109
137
REVOKE EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
110
138
FROM regress_pg_walinspect;
111
139
140
+ REVOKE EXECUTE ON FUNCTION pg_get_wal_fpi_info(pg_lsn, pg_lsn)
141
+ FROM regress_pg_walinspect;
142
+
112
143
-- ===================================================================
113
144
-- Clean up
114
145
-- ===================================================================
0 commit comments