mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Rework design of functions in pg_walinspect
This commit reworks a bit the set-returning functions of pg_walinspect, making them more flexible regarding their end LSN: - pg_get_wal_records_info() - pg_get_wal_stats() - pg_get_wal_block_info() The end LSNs given to these functions is now handled so as a value higher than the current LSN of the cluster (insert LSN for a primary, or replay LSN for a standby) does not raise an error, giving more flexibility to monitoring queries. Instead, the functions return results up to the current LSN, as found at the beginning of each function call. As an effect of that, pg_get_wal_records_info_till_end_of_wal() and pg_get_wal_stats_till_end_of_wal() are now removed from 1.1, as the existing, equivalent functions are able to offer the same possibilities. Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACU0_q-o4DSweyaW9NO1KBx-QkN6G_OzYQvpjf3CZVASkg@mail.gmail.com
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
-- test old extension version entry points
|
||||
CREATE EXTENSION pg_walinspect WITH VERSION '1.0';
|
||||
-- Mask DETAIL messages as these could refer to current LSN positions.
|
||||
\set VERBOSITY terse
|
||||
-- List what version 1.0 contains
|
||||
\dx+ pg_walinspect
|
||||
Objects in extension "pg_walinspect"
|
||||
@ -12,19 +14,51 @@ CREATE EXTENSION pg_walinspect WITH VERSION '1.0';
|
||||
function pg_get_wal_stats_till_end_of_wal(pg_lsn,boolean)
|
||||
(5 rows)
|
||||
|
||||
-- Make sure checkpoints don't interfere with the test.
|
||||
SELECT 'init' FROM pg_create_physical_replication_slot('regress_pg_walinspect_slot', true, false);
|
||||
?column?
|
||||
----------
|
||||
init
|
||||
(1 row)
|
||||
|
||||
CREATE TABLE sample_tbl(col1 int, col2 int);
|
||||
SELECT pg_current_wal_lsn() AS wal_lsn1 \gset
|
||||
INSERT INTO sample_tbl SELECT * FROM generate_series(1, 2);
|
||||
-- Check bounds for these past functions.
|
||||
SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1');
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal(:'wal_lsn1');
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF');
|
||||
ERROR: WAL start LSN must be less than current LSN
|
||||
SELECT COUNT(*) >= 1 AS ok FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF');
|
||||
ERROR: WAL start LSN must be less than current LSN
|
||||
-- Move to new version 1.1
|
||||
ALTER EXTENSION pg_walinspect UPDATE TO '1.1';
|
||||
-- List what version 1.1 contains
|
||||
\dx+ pg_walinspect
|
||||
Objects in extension "pg_walinspect"
|
||||
Object description
|
||||
-----------------------------------------------------------
|
||||
Objects in extension "pg_walinspect"
|
||||
Object description
|
||||
--------------------------------------------------
|
||||
function pg_get_wal_block_info(pg_lsn,pg_lsn)
|
||||
function pg_get_wal_record_info(pg_lsn)
|
||||
function pg_get_wal_records_info(pg_lsn,pg_lsn)
|
||||
function pg_get_wal_records_info_till_end_of_wal(pg_lsn)
|
||||
function pg_get_wal_stats(pg_lsn,pg_lsn,boolean)
|
||||
function pg_get_wal_stats_till_end_of_wal(pg_lsn,boolean)
|
||||
(6 rows)
|
||||
(4 rows)
|
||||
|
||||
SELECT pg_drop_replication_slot('regress_pg_walinspect_slot');
|
||||
pg_drop_replication_slot
|
||||
--------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
DROP TABLE sample_tbl;
|
||||
DROP EXTENSION pg_walinspect;
|
||||
|
@ -36,25 +36,33 @@ SELECT * FROM pg_get_wal_block_info(:'wal_lsn2', :'wal_lsn1');
|
||||
ERROR: WAL start LSN must be less than end LSN
|
||||
-- LSNs with the highest value possible.
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info('FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future input LSN
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info_till_end_of_wal('FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future start LSN
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats_till_end_of_wal('FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future start LSN
|
||||
-- failures with end LSNs
|
||||
ERROR: WAL input LSN must be less than current LSN
|
||||
-- Success with end LSNs.
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future end LSN
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future end LSN
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info(:'wal_lsn1', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future end LSN
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- failures with start LSNs
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future start LSN
|
||||
ERROR: WAL start LSN must be less than current LSN
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future start LSN
|
||||
ERROR: WAL start LSN must be less than current LSN
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_block_info('FFFFFFFF/FFFFFFFE', 'FFFFFFFF/FFFFFFFF');
|
||||
ERROR: cannot accept future start LSN
|
||||
ERROR: WAL start LSN must be less than current LSN
|
||||
-- ===================================================================
|
||||
-- Tests for all function executions
|
||||
-- ===================================================================
|
||||
@ -64,18 +72,6 @@ SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_record_info(:'wal_lsn1');
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info_till_end_of_wal(:'wal_lsn1');
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_stats_till_end_of_wal(:'wal_lsn1');
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_get_wal_records_info(:'wal_lsn1', :'wal_lsn2');
|
||||
ok
|
||||
----
|
||||
|
Reference in New Issue
Block a user