@@ -11,7 +11,7 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2);
1111
1212SELECT pg_current_wal_lsn() AS wal_lsn2 \gset
1313
14- INSERT INTO sample_tbl SELECT * FROM generate_series(1 , 2 );
14+ INSERT INTO sample_tbl SELECT * FROM generate_series(3 , 4 );
1515
1616-- ===================================================================
1717-- Tests for input validation
@@ -52,6 +52,22 @@ SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2'
5252SELECT COUNT (* ) >= 1 AS ok FROM pg_get_wal_records_info(:' wal_lsn1' , :' wal_lsn2' )
5353 WHERE resource_manager = ' Heap' AND record_type = ' INSERT' ;
5454
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+
5571-- ===================================================================
5672-- Tests for permissions
5773-- ===================================================================
@@ -66,6 +82,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
6682SELECT has_function_privilege(' regress_pg_walinspect' ,
6783 ' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- no
6884
85+ SELECT has_function_privilege(' regress_pg_walinspect' ,
86+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- no
87+
6988-- Functions accessible by users with role pg_read_server_files
7089
7190GRANT pg_read_server_files TO regress_pg_walinspect;
@@ -79,6 +98,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
7998SELECT has_function_privilege(' regress_pg_walinspect' ,
8099 ' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
81100
101+ SELECT has_function_privilege(' regress_pg_walinspect' ,
102+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
103+
82104REVOKE pg_read_server_files FROM regress_pg_walinspect;
83105
84106-- Superuser can grant execute to other users
@@ -91,6 +113,9 @@ GRANT EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
91113GRANT EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
92114 TO regress_pg_walinspect;
93115
116+ GRANT EXECUTE ON FUNCTION pg_get_wal_fpi_info(pg_lsn, pg_lsn)
117+ TO regress_pg_walinspect;
118+
94119SELECT has_function_privilege(' regress_pg_walinspect' ,
95120 ' pg_get_wal_record_info(pg_lsn)' , ' EXECUTE' ); -- yes
96121
@@ -100,6 +125,9 @@ SELECT has_function_privilege('regress_pg_walinspect',
100125SELECT has_function_privilege(' regress_pg_walinspect' ,
101126 ' pg_get_wal_stats(pg_lsn, pg_lsn, boolean) ' , ' EXECUTE' ); -- yes
102127
128+ SELECT has_function_privilege(' regress_pg_walinspect' ,
129+ ' pg_get_wal_fpi_info(pg_lsn, pg_lsn) ' , ' EXECUTE' ); -- yes
130+
103131REVOKE EXECUTE ON FUNCTION pg_get_wal_record_info(pg_lsn)
104132 FROM regress_pg_walinspect;
105133
@@ -109,6 +137,9 @@ REVOKE EXECUTE ON FUNCTION pg_get_wal_records_info(pg_lsn, pg_lsn)
109137REVOKE EXECUTE ON FUNCTION pg_get_wal_stats(pg_lsn, pg_lsn, boolean )
110138 FROM regress_pg_walinspect;
111139
140+ REVOKE EXECUTE ON FUNCTION pg_get_wal_fpi_info(pg_lsn, pg_lsn)
141+ FROM regress_pg_walinspect;
142+
112143-- ===================================================================
113144-- Clean up
114145-- ===================================================================
0 commit comments