v3-0001-Avoid-syscache-lookup-while-building-a-WAIT-FOR-t.patch
application/octet-stream
Filename: v3-0001-Avoid-syscache-lookup-while-building-a-WAIT-FOR-t.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 v3-0001
Subject: Avoid syscache lookup while building a WAIT FOR tuple descriptor
| File | + | − |
|---|---|---|
| src/backend/commands/wait.c | 10 | 3 |
From 526678dc7c19ecf6a26f4dbb70f73441ab2de817 Mon Sep 17 00:00:00 2001
From: Alexander Korotkov <akorotkov@postgresql.org>
Date: Sun, 5 Apr 2026 14:11:08 +0300
Subject: [PATCH v3 1/3] Avoid syscache lookup while building a WAIT FOR tuple
descriptor
Use TupleDescInitBuiltinEntry instead of TupleDescInitEntry when building
the result tuple descriptor for the WAIT FOR command. This avoids a syscache
access that could re-establish a catalog snapshot after we've explicitly
released all snapshots before the wait.
Discussion: https://postgr.es/m/CABPTF7U%2BSUnJX_woQYGe%3D%3DR9Oz%2B-V6X0VO2stBLPGfJmH_LEhw%40mail.gmail.com
Author: Xuneng Zhou <xunengzhou@gmail.com>
Reviewed-by: Alexander Korotkov <aekorotkov@gmail.com>
---
src/backend/commands/wait.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/backend/commands/wait.c b/src/backend/commands/wait.c
index e64e3be6285..85fcd463b4c 100644
--- a/src/backend/commands/wait.c
+++ b/src/backend/commands/wait.c
@@ -335,10 +335,17 @@ WaitStmtResultDesc(WaitStmt *stmt)
{
TupleDesc tupdesc;
- /* Need a tuple descriptor representing a single TEXT column */
+ /*
+ * Need a tuple descriptor representing a single TEXT column.
+ *
+ * We use TupleDescInitBuiltinEntry instead of TupleDescInitEntry to avoid
+ * syscache access. This is important because WaitStmtResultDesc may be
+ * called after snapshots have been released, and we must not re-establish
+ * a catalog snapshot which could cause recovery conflicts on a standby.
+ */
tupdesc = CreateTemplateTupleDesc(1);
- TupleDescInitEntry(tupdesc, (AttrNumber) 1, "status",
- TEXTOID, -1, 0);
+ TupleDescInitBuiltinEntry(tupdesc, (AttrNumber) 1, "status",
+ TEXTOID, -1, 0);
TupleDescFinalize(tupdesc);
return tupdesc;
}
--
2.39.5 (Apple Git-154)