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 1wRvwq-002omO-1F for pgsql-bugs@arkaria.postgresql.org; Tue, 26 May 2026 17:52:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wRvwn-005VqO-07 for pgsql-bugs@arkaria.postgresql.org; Tue, 26 May 2026 17:52:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wRvwm-005VqG-2C for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 17:52:09 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wRvwl-00000001YiJ-0WkE for pgsql-bugs@lists.postgresql.org; Tue, 26 May 2026 17:52:09 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-44a14580111so8098864f8f.0 for ; Tue, 26 May 2026 10:52:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779817925; x=1780422725; darn=lists.postgresql.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=Wh2fqVjoPUicYzmL2+hKbsAT2HTfJqKxilpql10PuJ8=; b=F2CfTkEx0JJIH4U94cNcT4+Qpk+gINUF4PfRb2P4n3QF8bEClY+gLyWKCySDfcH8jB BxRCLrDV/bqbuX4xq+dOWEz44Yudb5iuT3IFoUVr9OTTs2sToLHYVBGF7NOgveybOn5L 7AQsj5zcrHY0mzV0f9a6HVv/YyI9v+sy12FayQuF/1EHl+JTucWEFMtd6Xeq2RKplKdM B3ZsqN5YqU2lXZ4/+/pbmPNtVAOcuj9LtlzKHj8M3+llTg8EJnMnlZKW/49jFOKlJv0V hZBa3yOdhGKU2IgK8XRek/ketd8g3fBpaOdnzGMTVOMHW2ZdKtU0/ZmFPjxi4UTN4QEk odQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779817925; x=1780422725; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Wh2fqVjoPUicYzmL2+hKbsAT2HTfJqKxilpql10PuJ8=; b=s1//WrfyRHoE0SABQVFZL0MvtbYF2nKQceKfCgDHLNtRM54Ihfrps5Zt3HJV4Rn+18 t4oPogAv3YWsT2RgzKwGlXApWllpNy/Ti33omm237gmvw6CqiKhTYu0hwMgGfJIw7c05 qqrTT+Sooj9gD7kzTO3s3RDXNZyX/e/pLxowPv7umC2YA50KmYGUYE98Fn94+fGzVMTJ ozvoK4Le1vm670RuKbGX5SAayTCgum8HlQqVofRw2D+9kFpqMN34gQcOhIagprDkYzVm NTZMMkSuwqyIHVbULuCt7g+UWq+X9rWrHplOVdnXG9zMoG9qHhuiT92pysWGql5VID6B bNCQ== X-Forwarded-Encrypted: i=1; AFNElJ+V60D/tZvDgeTdKnaNo7KjxJD9PMGV/BslJg/oscJF2uwB8xoPthQxrmnRGjMVX0wUtH8V+8/QQGuo@lists.postgresql.org X-Gm-Message-State: AOJu0Yw9UqZ0Jz8gdKPna90uY4gnd321cyaUR2ug/5rP+am2OxrYtHEC y4XWs4OSelHDmAsh3dCxXICOUPcwd49/KJOBlOVHRA16bDDztT4qWA4l X-Gm-Gg: Acq92OFDnVLrjzOpA7T2428gSsSE1woCfO8djz44JPK97jjqLJcDAhXT/a7JwH3T/53 YcMFCbtxFUnPRcDvrWlW16NFBjh01Lu7i774X/a9ApYc5Ok0VC9k2AwkdqD2ZY1NxzK6REvZxLy VohtvbKxE5p8/fZUfio1WW1Jg/8jGF4pbaauav+VRNzWJfstPVicIDZa7ed+9a6lF4/3Lvww+rn O+bI4fqKxOKJroDb2VrdMTqKut0DS1BINQkCgUxJRZQ3cel2pKn0cPJ5hespiFza9Owuu4WheAN eYDJP40iQtfGYjQNGcuUFXOYLD5uFq+owSez2PcHKH8OUOkFSot6/PCdYDepj0mgMY8GmoeAAOP 12hJwJy7o1OSoTwFbvy9sN1sVcPV4gvYb3E0uhWeechDQ9R55ftDXZSEww2wE9N3f92td8Ehx58 sYDTqifdTrI98rdW+fpx1Uejm97l6xMZBeKd5WMZtz/Z4IIjizoud9f9hPohFp8b4EeoN8y0RGq w== X-Received: by 2002:a05:6000:4010:b0:45e:73b3:8118 with SMTP id ffacd0b85a97d-45eb38b780emr33758146f8f.29.1779817924553; Tue, 26 May 2026 10:52:04 -0700 (PDT) Received: from ?IPV6:2a01:e0a:22d:4d0:1ac0:4dff:fe8b:a3c7? ([2a01:e0a:22d:4d0:1ac0:4dff:fe8b:a3c7]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45eb6d4903bsm34548268f8f.21.2026.05.26.10.52.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 May 2026 10:52:04 -0700 (PDT) Message-ID: <2d59d7d6-6afe-4565-8ff7-ae764651589a@gmail.com> Date: Tue, 26 May 2026 19:52:03 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #19493: Assertion failure in pg_plan_advice with EXISTS subquery and DO_NOT_SCAN advice To: n.kalinin@postgrespro.ru, pgsql-bugs@lists.postgresql.org, PG Bug reporting form References: <19493-5878eac7a2525c23@postgresql.org> Content-Language: en-US From: Pierre Forstmann In-Reply-To: <19493-5878eac7a2525c23@postgresql.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello, I am not sure pg_plan_advice is supported with PG 18.4 ? I cannot reproduce with latest commit from PG 19 master branch: $ git log -n 1 commit 61ea5cc6a61ff9eb8b3d7b055e507a726e5856c7 (HEAD -> master, origin/master, origin/HEAD) Author: Tom Lane Date:   Tue May 26 11:58:25 2026 -0400     Add stack depth check to QueueFKConstraintValidation().     QueueFKConstraintValidation() recurses through the partition hierarchy     to queue child constraint validations and to mark child rows as     validated.  With a sufficiently deep partition tree, this can result     in a stack-overflow crash.  Defend against that as we do elsewhere.     Bug: #19482     Reported-by: Alexander Lakhin     Author: Ayush Tiwari     Reviewed-by: Tom Lane     Discussion: https://postgr.es/m/19482-4cc37cbf52d55235@postgresql.org     Backpatch-through: 18 postgres=# select version();                                                    version --------------------------------------------------------------------------------------------------------------  PostgreSQL 19devel on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-11), 64-bit (1 row) postgres=# I tested with: DROP TABLE a; DROP TABLE DROP TABLE b; DROP TABLE LOAD 'pg_plan_advice'; LOAD CREATE TABLE a(i int); CREATE TABLE CREATE TABLE b(i int); CREATE TABLE SET pg_plan_advice.feedback_warnings = on; SET SET pg_plan_advice.advice = 'DO_NOT_SCAN((a))'; SET EXPLAIN SELECT * FROM a WHERE EXISTS (     SELECT 1     FROM b     WHERE b.i = a.i ); psql:bug.sql:19: WARNING:  supplied plan advice was not enforced DETAIL:  advice DO_NOT_SCAN((a)) feedback is "matched, failed"                               QUERY PLAN -----------------------------------------------------------------------  Hash Join  (cost=46.38..102.75 rows=1275 width=4)    Hash Cond: (a.i = b.i)    ->  Seq Scan on a  (cost=0.00..35.50 rows=2550 width=4)          Disabled: true    ->  Hash  (cost=43.88..43.88 rows=200 width=4)          ->  HashAggregate  (cost=41.88..43.88 rows=200 width=4)                Group Key: b.i                ->  Seq Scan on b  (cost=0.00..35.50 rows=2550 width=4)  Supplied Plan Advice:    DO_NOT_SCAN((a)) /* matched, failed */ (10 rows) Le 26/05/2026 à 16:44, PG Bug reporting form a écrit : > 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: > > 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 = on; > SET pg_plan_advice.advice = 'DO_NOT_SCAN((a))'; > > EXPLAIN > SELECT * > FROM a > WHERE EXISTS ( > SELECT 1 > FROM b > WHERE b.i = 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 == 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=, > signo=signo@entry=6, > no_tid=no_tid@entry=0) at pthread_kill.c:44 > #1 0x00007fb2bf27a8d3 in __pthread_kill_internal (threadid=, > signo=6) > at pthread_kill.c:89 > #2 0x00007fb2bf21f48e in __GI_raise (sig=sig@entry=6) at > ../sysdeps/posix/raise.c:26 > #3 0x00007fb2bf2067b3 in __GI_abort () at abort.c:77 > #4 0x0000000000a2d098 in ExceptionalCondition ( > conditionName=conditionName@entry=0x7fb2c0649828 "target->ttype == > PGPA_TARGET_IDENTIFIER", > fileName=fileName@entry=0x7fb2c064a184 "pgpa_trove.c", > lineNumber=lineNumber@entry=182) > at assert.c:65 > #5 0x00007fb2c06440b2 in pgpa_build_trove (advice_items=0x32a59488) at > pgpa_trove.c:182 > #6 0x00007fb2c063e33f in pgpa_planner_setup (glob=0x32985888, > parse=0x32956d60, > query_string=0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT > 1 FROM b WHERE b.i = a.i);", cursorOptions=2048, > tuple_fraction=0x7ffe98a152f0, es=0x32985308) at pgpa_planner.c:255 > #7 0x00000000007b51ff in standard_planner (parse=0x32956d60, > query_string=, > cursorOptions=2048, boundParams=, es=0x32985308) at > planner.c:533 > #8 0x00000000007b5a0d in planner (parse=parse@entry=0x32956d60, > query_string=query_string@entry=0x329558b0 "EXPLAIN SELECT *\nFROM > a\nWHERE EXISTS (SELECT 1 FROM b WHERE b.i = a.i);", > cursorOptions=cursorOptions@entry=2048, > boundParams=boundParams@entry=0x0, es=es@entry=0x32985308) at > planner.c:342 > #9 0x00000000008c297d in pg_plan_query > (querytree=querytree@entry=0x32956d60, > query_string=query_string@entry=0x329558b0 "EXPLAIN SELECT *\nFROM > a\nWHERE EXISTS (SELECT 1 FROM b WHERE b.i = a.i);", cursorOptions=2048, > boundParams=boundParams@entry=0x0, > es=es@entry=0x32985308) at postgres.c:917 > #10 0x000000000062ed1e in standard_ExplainOneQuery (query=0x32956d60, > cursorOptions=, into=0x0, es=0x32985308, > queryString=0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT 1 > FROM b WHERE b.i = a.i);", params=0x0, queryEnv=0x0) at explain.c:359 > #11 0x000000000062ef8e in ExplainOneQuery (query=, > cursorOptions=, > into=, es=, pstate=, > params=) > at explain.c:315 > --Type for more, q to quit, c to continue without paging--c > #12 0x000000000062f0ae in ExplainQuery (pstate=0x32982990, stmt=0x32956ba0, > params=0x0, > dest=0x32985278) at ../../../src/include/nodes/nodes.h:178 > #13 0x00000000008c8819 in standard_ProcessUtility (pstmt=0x32956c50, > queryString=0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT 1 > FROM b WHERE b.i = a.i);", readOnlyTree=, > context=PROCESS_UTILITY_TOPLEVEL, params=0x0, queryEnv=0x0, > dest=0x32985278, qc=0x7ffe98a15660) at utility.c:871 > #14 0x00000000008c6b8d in PortalRunUtility (portal=portal@entry=0x329f91e0, > pstmt=0x32956c50, > isTopLevel=isTopLevel@entry=true, > setHoldSnapshot=setHoldSnapshot@entry=true, > dest=dest@entry=0x32985278, qc=qc@entry=0x7ffe98a15660) at pquery.c:1149 > #15 0x00000000008c7060 in FillPortalStore (portal=portal@entry=0x329f91e0, > isTopLevel=isTopLevel@entry=true) at > ../../../src/include/nodes/nodes.h:178 > #16 0x00000000008c737d in PortalRun (portal=portal@entry=0x329f91e0, > count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=true, > dest=dest@entry=0x32a690d8, altdest=altdest@entry=0x32a690d8, > qc=qc@entry=0x7ffe98a15830) > at pquery.c:756 > #17 0x00000000008c2f48 in exec_simple_query ( > query_string=0x329558b0 "EXPLAIN SELECT *\nFROM a\nWHERE EXISTS (SELECT > 1 FROM b WHERE b.i = a.i);") at postgres.c:1290 > #18 0x00000000008c4a21 in PostgresMain (dbname=, > username=) > at postgres.c:4856 > #19 0x00000000008bea1d in BackendMain (startup_data=, > startup_data_len=) at backend_startup.c:124 > #20 0x00000000007fea2e in postmaster_child_launch (child_type= out>, child_slot=1, > startup_data=startup_data@entry=0x7ffe98a15c80, > startup_data_len=startup_data_len@entry=24, > client_sock=client_sock@entry=0x7ffe98a15ca0) at launch_backend.c:268 > #21 0x0000000000802436 in BackendStartup (client_sock=0x7ffe98a15ca0) at > postmaster.c:3627 > #22 ServerLoop () at postmaster.c:1728 > #23 0x0000000000803ef9 in PostmasterMain (argc=argc@entry=3, > argv=argv@entry=0x328ff080) > at postmaster.c:1415 > #24 0x00000000004a1a68 in main (argc=3, argv=0x328ff080) at main.c:231 > > > >