Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRumA-002np8-29 for pgsql-bugs@arkaria.postgresql.org; Tue, 26 May 2026 16:37:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRum6-005DGD-2r for pgsql-bugs@arkaria.postgresql.org; Tue, 26 May 2026 16:37:03 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRt1n-004dsp-1T for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 14:45:08 +0000 Received: from mahout.postgresql.org ([2001:4800:3e1:1::227]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wRt1m-00000000rlQ-2OgZ for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 14:45:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Message-ID:Date:Reply-To:Cc:From:To:Subject: Content-Transfer-Encoding:MIME-Version:Content-Type:Sender:Content-ID: Content-Description:In-Reply-To:References; bh=Ym0SCwgJG3y44vy5SaDJfHMLbn6gkpi7+LRo4a3AuGM=; b=JI7wb7OrWO6BAGd04aT6GYpQ1Y VbC8dPZRQBj/s5Im6YqQtGVwVBg16QvjQrQWYRYey4ctCyOP7Bt2fG2zY628TP/dURFKA1AvVJCNY aUHTaBjl5EhPbuoIkUAVn25yUWB/9SCJILrM88UoRm+D/CHnYTbF7eQJy/0WtvDDMGwPLcoyN9MMy Roz/LtYsakR28dvd1jV3bsSL/e/krPua+uIe2nej1kM6j9Bzn6msylecqgNCGxqr1ILOyX4vncBVP rcR2MyPay33XtzPu/2nrgiqWKr/2rIq8O1V+y973c3DSAwwzWYr9XcxpKh3CcojcrtoB0a3w/3IbP KprFHucw==; Received: from wrigleys.postgresql.org ([2a02:16a8:dc51::60]) by mahout.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRt1l-002kwf-12 for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 14:45:06 +0000 Received: from localhost ([127.0.0.1] helo=wrigleys.postgresql.org) by wrigleys.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRt1j-0095PT-2K for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 14:45:03 +0000 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: BUG #19493: Assertion failure in pg_plan_advice with EXISTS subquery and DO_NOT_SCAN advice To: pgsql-bugs@lists.postgresql.org From: PG Bug reporting form Cc: n.kalinin@postgrespro.ru Reply-To: n.kalinin@postgrespro.ru, pgsql-bugs@lists.postgresql.org Date: Tue, 26 May 2026 14:44:38 +0000 Message-ID: <19493-5878eac7a2525c23@postgresql.org> X-Auto-Response-Suppress: All Auto-Submitted: auto-generated List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk The following bug has been logged on the website: Bug reference: 19493 Logged by: Nikita Kalinin Email address: n.kalinin@postgrespro.ru PostgreSQL version: 18.4 Operating system: Fedora 44 Description: =20 Hi, I found an assertion failure in pg_plan_advice. Reproducer: LOAD 'pg_plan_advice'; CREATE TABLE a(i int); CREATE TABLE b(i int); SET pg_plan_advice.feedback_warnings =3D on; SET pg_plan_advice.advice =3D 'DO_NOT_SCAN((a))'; EXPLAIN SELECT * FROM a WHERE EXISTS ( SELECT 1 FROM b WHERE b.i =3D a.i ); Result: 2026-05-26 21:36:46.452 +07 [83331] LOG: database system is ready to accept connections TRAP: failed Assert("target->ttype =3D=3D PGPA_TARGET_IDENTIFIER"), File: "pgpa_trove.c", Line: 182, PID: 83390 postgres: nkpit postgres [local] EXPLAIN(ExceptionalCondition+0x57) [0xa2d077] /tmp/pg/lib/postgresql/pg_plan_advice.so(+0xb0b2) [0x7fb2c06440b2] /tmp/pg/lib/postgresql/pg_plan_advice.so(+0x533f) [0x7fb2c063e33f] postgres: nkpit postgres [local] EXPLAIN(standard_planner+0x1ff) [0x7b51ff] ... Backtrace: #0 __pthread_kill_implementation (threadid=3D, signo=3Dsigno@entry=3D6, no_tid=3Dno_tid@entry=3D0) at pthread_kill.c:44 #1 0x00007fb2bf27a8d3 in __pthread_kill_internal (threadid=3D, signo=3D6) at pthread_kill.c:89 #2 0x00007fb2bf21f48e in __GI_raise (sig=3Dsig@entry=3D6) at ../sysdeps/posix/raise.c:26 #3 0x00007fb2bf2067b3 in __GI_abort () at abort.c:77 #4 0x0000000000a2d098 in ExceptionalCondition ( conditionName=3DconditionName@entry=3D0x7fb2c0649828 "target->ttype =3D= =3D PGPA_TARGET_IDENTIFIER", fileName=3DfileName@entry=3D0x7fb2c064a184 "pgpa_trove.c", lineNumber=3DlineNumber@entry=3D182) at assert.c:65 #5 0x00007fb2c06440b2 in pgpa_build_trove (advice_items=3D0x32a59488) at pgpa_trove.c:182 #6 0x00007fb2c063e33f in pgpa_planner_setup (glob=3D0x32985888, parse=3D0x32956d60, query_string=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELE= CT 1 FROM b WHERE b.i =3D a.i);", cursorOptions=3D2048, tuple_fraction=3D0x7ffe98a152f0, es=3D0x32985308) at pgpa_planner.c:255 #7 0x00000000007b51ff in standard_planner (parse=3D0x32956d60, query_string=3D, cursorOptions=3D2048, boundParams=3D, es=3D0x32985308) at planner.c:533 #8 0x00000000007b5a0d in planner (parse=3Dparse@entry=3D0x32956d60, query_string=3Dquery_string@entry=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT 1 FROM b WHERE b.i =3D a.i);", cursorOptions=3DcursorOptions@entry=3D2048, boundParams=3DboundParams@entry=3D0x0, es=3Des@entry=3D0x32985308) at planner.c:342 #9 0x00000000008c297d in pg_plan_query (querytree=3Dquerytree@entry=3D0x32956d60, query_string=3Dquery_string@entry=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT 1 FROM b WHERE b.i =3D a.i);", cursorOptions=3D2048, boundParams=3DboundParams@entry=3D0x0, es=3Des@entry=3D0x32985308) at postgres.c:917 #10 0x000000000062ed1e in standard_ExplainOneQuery (query=3D0x32956d60, cursorOptions=3D, into=3D0x0, es=3D0x32985308, queryString=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELEC= T 1 FROM b WHERE b.i =3D a.i);", params=3D0x0, queryEnv=3D0x0) at explain.c:359 #11 0x000000000062ef8e in ExplainOneQuery (query=3D, cursorOptions=3D, into=3D, es=3D, pstate=3D, params=3D) at explain.c:315 --Type for more, q to quit, c to continue without paging--c #12 0x000000000062f0ae in ExplainQuery (pstate=3D0x32982990, stmt=3D0x32956= ba0, params=3D0x0, dest=3D0x32985278) at ../../../src/include/nodes/nodes.h:178 #13 0x00000000008c8819 in standard_ProcessUtility (pstmt=3D0x32956c50, queryString=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELEC= T 1 FROM b WHERE b.i =3D a.i);", readOnlyTree=3D, context=3DPROCESS_UTILITY_TOPLEVEL, params=3D0x0, queryEnv=3D0x0, dest=3D0x32985278, qc=3D0x7ffe98a15660) at utility.c:871 #14 0x00000000008c6b8d in PortalRunUtility (portal=3Dportal@entry=3D0x329f9= 1e0, pstmt=3D0x32956c50, isTopLevel=3DisTopLevel@entry=3Dtrue, setHoldSnapshot=3DsetHoldSnapshot@entry=3Dtrue, dest=3Ddest@entry=3D0x32985278, qc=3Dqc@entry=3D0x7ffe98a15660) at pque= ry.c:1149 #15 0x00000000008c7060 in FillPortalStore (portal=3Dportal@entry=3D0x329f91= e0, isTopLevel=3DisTopLevel@entry=3Dtrue) at ../../../src/include/nodes/nodes.h:178 #16 0x00000000008c737d in PortalRun (portal=3Dportal@entry=3D0x329f91e0, count=3Dcount@entry=3D9223372036854775807, isTopLevel=3DisTopLevel@entr= y=3Dtrue, dest=3Ddest@entry=3D0x32a690d8, altdest=3Daltdest@entry=3D0x32a690d8, qc=3Dqc@entry=3D0x7ffe98a15830) at pquery.c:756 #17 0x00000000008c2f48 in exec_simple_query ( query_string=3D0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELE= CT 1 FROM b WHERE b.i =3D a.i);") at postgres.c:1290 #18 0x00000000008c4a21 in PostgresMain (dbname=3D, username=3D) at postgres.c:4856 #19 0x00000000008bea1d in BackendMain (startup_data=3D, startup_data_len=3D) at backend_startup.c:124 #20 0x00000000007fea2e in postmaster_child_launch (child_type=3D, child_slot=3D1, startup_data=3Dstartup_data@entry=3D0x7ffe98a15c80, startup_data_len=3Dstartup_data_len@entry=3D24, client_sock=3Dclient_sock@entry=3D0x7ffe98a15ca0) at launch_backend.c:2= 68 #21 0x0000000000802436 in BackendStartup (client_sock=3D0x7ffe98a15ca0) at postmaster.c:3627 #22 ServerLoop () at postmaster.c:1728 #23 0x0000000000803ef9 in PostmasterMain (argc=3Dargc@entry=3D3, argv=3Dargv@entry=3D0x328ff080) at postmaster.c:1415 #24 0x00000000004a1a68 in main (argc=3D3, argv=3D0x328ff080) at main.c:231