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

Поиск
Список
Период
Сортировка
От PG Bug reporting form
Тема BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments
Дата
Msg-id 19464-9d06e78620c0dfd5@postgresql.org
обсуждение
Ответы RE: BUG #19464: Server crash (SIGABRT) with UPDATE containing multiple multi-column assignments
Список 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 по дате отправления: