v2-0001-049_wait_for_lsn.pl-create-function-and-procedure.patch
application/octet-stream
Filename: v2-0001-049_wait_for_lsn.pl-create-function-and-procedure.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0001
Subject: 049_wait_for_lsn.pl: create function and procedure at once
| File | + | − |
|---|---|---|
| src/test/recovery/t/049_wait_for_lsn.pl | 11 | 13 |
From b85c48eb9edaca42065b9596d87ad4c6ac0e9eb1 Mon Sep 17 00:00:00 2001
From: Alexander Korotkov <akorotkov@postgresql.org>
Date: Sat, 18 Apr 2026 10:52:19 +0300
Subject: [PATCH v2] 049_wait_for_lsn.pl: create function and procedure at once
Create the PL/pgSQL function and procedure for the top-level WAIT FOR
checks in a single transaction, then wait once for standby replay before
running both tests. Also revise some surrounding comments.
This avoids an extra 'wait_for_catchup()' on the delayed standby without
changing the test coverage.
Discussion: https://postgr.es/m/CABPTF7WZ1yuYz8V%3Dxsbghg8e7qaAm5MpyNw6BthWcbN7%2BP6biw%40mail.gmail.com
Author: Xuneng Zhou <xunengzhou@gmail.com>
Reviewed-by: Alexander Korotkov <aekorotkov@gmail.com>
---
src/test/recovery/t/049_wait_for_lsn.pl | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/src/test/recovery/t/049_wait_for_lsn.pl b/src/test/recovery/t/049_wait_for_lsn.pl
index 8358c57f7b7..0e74175f9eb 100644
--- a/src/test/recovery/t/049_wait_for_lsn.pl
+++ b/src/test/recovery/t/049_wait_for_lsn.pl
@@ -172,8 +172,8 @@ ok($output eq "timeout", "WAIT FOR returns correct status after timeout");
# 5. Check mode validation: standby modes error on primary, primary mode errors
# on standby, and primary_flush works on primary. Also check that WAIT FOR
-# triggers an error if called within another function or inside a transaction
-# with an isolation level higher than READ COMMITTED.
+# triggers an error if called within a function, procedure, anonymous DO block,
+# or inside a transaction with an isolation level higher than READ COMMITTED.
# Test standby_flush on primary - should error
$node_primary->psql(
@@ -200,6 +200,8 @@ ok( $stderr =~
"get an error when running in a transaction with an isolation level higher than REPEATABLE READ"
);
+# Test wrapping WAIT FOR into function, procedure, and anonymous DO block --
+# should error
$node_primary->safe_psql(
'postgres', qq[
CREATE FUNCTION pg_wal_replay_wait_wrap(target_lsn pg_lsn) RETURNS void AS \$\$
@@ -208,18 +210,7 @@ CREATE FUNCTION pg_wal_replay_wait_wrap(target_lsn pg_lsn) RETURNS void AS \$\$
END
\$\$
LANGUAGE plpgsql;
-]);
-
-$node_primary->wait_for_catchup($node_standby);
-$node_standby->psql(
- 'postgres',
- "SELECT pg_wal_replay_wait_wrap('${lsn3}');",
- stderr => \$stderr);
-ok($stderr =~ /WAIT FOR can only be executed as a top-level statement/,
- "get an error when running within a function");
-$node_primary->safe_psql(
- 'postgres', qq[
CREATE PROCEDURE pg_wal_replay_wait_proc(target_lsn pg_lsn) AS \$\$
BEGIN
EXECUTE format('WAIT FOR LSN %L;', target_lsn);
@@ -229,6 +220,13 @@ LANGUAGE plpgsql;
]);
$node_primary->wait_for_catchup($node_standby);
+$node_standby->psql(
+ 'postgres',
+ "SELECT pg_wal_replay_wait_wrap('${lsn3}');",
+ stderr => \$stderr);
+ok($stderr =~ /WAIT FOR can only be executed as a top-level statement/,
+ "get an error when running within a function");
+
$node_standby->psql(
'postgres',
"CALL pg_wal_replay_wait_proc('${lsn3}');",
--
2.39.5 (Apple Git-154)