BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments - Mailing list pgsql-bugs
| From | PG Bug reporting form |
|---|---|
| Subject | BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments |
| Date | |
| Msg-id | 19464-9d06e78620c0dfd5@postgresql.org Whole thread |
| Responses |
RE: BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments
|
| List | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 19464
Logged by: chunling qin
Email address: 303677365@qq.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
pgsql-bugs by date: