BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments

From: PG Bug reporting form <noreply(at)postgresql(dot)org>
To: pgsql-bugs(at)lists(dot)postgresql(dot)org
Cc: 303677365(at)qq(dot)com
Subject: BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments
Date: 2026-04-20 09:45:19
Message-ID: 19464-9d06e78620c0dfd5@postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 19464
Logged by: chunling qin
Email address: 303677365(at)qq(dot)com
PostgreSQL version: 14.0
Operating system: centos
Description:

This issue could not be reproduced with the latest version, but we can
easily reproduced by PostgreSQL 14devel. I am submitting this report for
official confirmation.

postgres=# CREATE TABLE t1 (a int, b int);

UPDATE t1
SET (a) = (SELECT 1), -- subquery single-column assignment
b = 2, -- single-column assignment
(a) = ROW(1); ERROR: relation "t1" already exists
postgres=# postgres=# postgres-# postgres-# postgres-#
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
postgres=#

postgres=# select version();
version

--------------------------------------------------------------------------------------
-------------------------------------------------
PostgreSQL 14devel on x86_64-pc-linux-gnu, compiled by clang version 17.0.6
(TencentO
S 17.0.6-8.tl4.ap.2), 64-bit (commit:86dc90056d)
(1 row)

Minimal Reproduction:
```
CREATE TABLE t1 (a int, b int);

UPDATE t1
SET (a) = (SELECT 1), -- subquery single-column assignment
b = 2, -- single-column assignment
(a) = ROW(1); -- ROW constructor single-column assignment
```
Crash Summary

The server terminates with SIGABRT due to a failed assertion:

TRAP: FailedAssertion("pstate->p_multiassign_exprs == NIL", File:
"parse_target.c",
Line: 277, PID: 2398140)

Version

- Git commit: 86dc90056dfdbd9d1b891718d2e5614e3e432f35
- Version string: PostgreSQL 14devel (commit 86dc90056d, "Rework planning
and
execution of UPDATE and DELETE.")
- Platform: x86_64-pc-linux-gnu, compiled by clang 17.0.6, 64-bit
- Build config: enable_debug=yes, CFLAGS includes -g -O0, asserts enabled

Full Backtrace

#0 __pthread_kill_implementation () from /lib64/libc.so.6
#1 raise () from /lib64/libc.so.6
#2 abort () from /lib64/libc.so.6
#3 ExceptionalCondition (conditionName="pstate->p_multiassign_exprs ==
NIL",
errorType="FailedAssertion",
fileName="parse_target.c", lineNumber=277)
at assert.c:69
#4 transformExpressionList (pstate=..., exprlist=...,
exprKind=EXPR_KIND_UPDATE_SOURCE,
allowDefault=true)
at parse_target.c:277
#5 transformRowExpr (pstate=..., r=..., allowDefault=true)
at parse_expr.c:2086
#6 transformMultiAssignRef (pstate=..., maref=...)
at parse_expr.c:1454
#7 transformExprRecurse (pstate=..., expr=...)
at parse_expr.c:212
#8 transformExpr (pstate=..., expr=..., exprKind=EXPR_KIND_UPDATE_SOURCE)
at parse_expr.c:104
#9 transformTargetEntry (pstate=..., node=..., ...)
at parse_target.c:95
#10 transformTargetList (pstate=..., targetlist=...,
exprKind=EXPR_KIND_UPDATE_SOURCE)
at parse_target.c:183
#11 transformUpdateTargetList (pstate=..., origTlist=...)
at analyze.c:2308
#12 transformUpdateStmt (pstate=..., stmt=...)
at analyze.c:2283
#13 transformStmt (pstate=..., parseTree=...)
at analyze.c:295
#14 transformOptionalSelectInto (pstate=..., parseTree=...)
at analyze.c:250
#15 transformTopLevelStmt (pstate=..., parseTree=...)
at analyze.c:200
#16 parse_analyze (parseTree=..., sourceText="UPDATE t1 SET (a) = (SELECT
1), b = 2,
(a) = ROW(1);", ...)
at analyze.c:120
#17 pg_analyze_and_rewrite (...)
at postgres.c:637
#18 exec_simple_query (query_string="UPDATE t1 SET (a) = (SELECT 1), b =
2, (a) =
ROW(1);")
at postgres.c:1101
#19 PostgresMain (...)
at postgres.c:4415
#20 main (argc=5, argv=...)
at main.c:205

Browse pgsql-bugs by date

  From Date Subject
Next Message Andrey Rachitskiy 2026-04-20 13:38:38 Re: BUG #19458: OOM killer in jsonb_path_exists_opr (@?) with malformed JSONPath containing non-existent variables
Previous Message PG Bug reporting form 2026-04-20 09:42:33 BUG #19463: Server crash (Assertion failure) when using MERGE statement in CTE