Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m18Bw-00088n-Jy for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Jul 2021 14:06:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m18Bv-0005GE-1e for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Jul 2021 14:06:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m18Bu-0005G6-KK for pgsql-hackers@lists.postgresql.org; Wed, 07 Jul 2021 14:06:18 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m18Bs-0003tz-0n for pgsql-hackers@postgresql.org; Wed, 07 Jul 2021 14:06:18 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id D83A321C8F26 for ; Wed, 7 Jul 2021 17:06:14 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1625666774; bh=1IDftOudSIDt3WcHwcIJVgKCoCnS10vRhBnOE45KSfE=; h=Date:From:To:Subject; b=Ykq/tluo2eHp4dnpqZX5ZlO7HnANEk4FISgDAsunzknwRdKB1W5vnqv0rV+6pvQJX hXJudjRvJkr65UNDGSLEF8PGyzsWowcfM88MHg3HhxLo19o9gwalQIVNID8ohrFCfX GWlE2MWVS3TPXNjR9STvS5xvuJ91UEgKvj3+G4V0= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_f958fa8ce8044f198cc2445beec168b5" Content-Transfer-Encoding: 7bit Date: Wed, 07 Jul 2021 17:06:14 +0300 From: Alexander Pyhalov To: Pgsql Hackers Subject: PostgreSQL 14 backend crash on incorrect trigger User-Agent: Roundcube Webmail/1.4.0 Message-ID: X-Sender: a.pyhalov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_f958fa8ce8044f198cc2445beec168b5 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi. The following test case makes postgresql backend crash. The trigger is incorrect, but this didn't crash postgresql before commit 86dc90056dfdbd9d1b891718d2e5614e3e432f35 (HEAD) Author: Tom Lane Date: Wed Mar 31 11:52:34 2021 -0400 Rework planning and execution of UPDATE and DELETE. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007f1032cc6905 in find_modifytable_subplan (root=0x563f05e61458, plan=0x563f06020e48, rtindex=1, subplan_index=0) at postgres_fdw.c:2373 2373 else if (IsA(subplan, Result) && IsA(outerPlan(subplan), Append)) (gdb) bt #0 0x00007f1032cc6905 in find_modifytable_subplan (root=0x563f05e61458, plan=0x563f06020e48, rtindex=1, subplan_index=0) at postgres_fdw.c:2373 #1 0x00007f1032cc6a44 in postgresPlanDirectModify (root=0x563f05e61458, plan=0x563f06020e48, resultRelation=1, subplan_index=0) at postgres_fdw.c:2433 #2 0x0000563f035f2876 in make_modifytable (root=0x563f05e61458, subplan=0x563f05e626e8, operation=CMD_DELETE, canSetTag=true, nominalRelation=1, rootRelation=0, partColsUpdated=false, resultRelations=0x563f06020b88, updateColnosLists=0x0, withCheckOptionLists=0x0, returningLists=0x0, rowMarks=0x0, onconflict=0x0, epqParam=0) at createplan.c:7007 #3 0x0000563f035e9ab3 in create_modifytable_plan (root=0x563f05e61458, best_path=0x563f05e62168) at createplan.c:2746 #4 0x0000563f035e5936 in create_plan_recurse (root=0x563f05e61458, best_path=0x563f05e62168, flags=1) at createplan.c:530 #5 0x0000563f035e54be in create_plan (root=0x563f05e61458, best_path=0x563f05e62168) at createplan.c:347 #6 0x0000563f035f8810 in standard_planner (parse=0x563f05e60c08, query_string=0x563f05ffd8d0 "DELETE FROM test_remote WHERE row(i,j)=row(new.i,new.j)", cursorOptions=2048, boundParams=0x563f05e980d8) at planner.c:407 #7 0x0000563f035f84f4 in planner (parse=0x563f05e60c08, query_string=0x563f05ffd8d0 "DELETE FROM test_remote WHERE row(i,j)=row(new.i,new.j)", cursorOptions=2048, boundParams=0x563f05e980d8) at planner.c:271 #8 0x0000563f0373f9c7 in pg_plan_query (querytree=0x563f05e60c08, query_string=0x563f05ffd8d0 "DELETE FROM test_remote WHERE row(i,j)=row(new.i,new.j)", cursorOptions=2048, boundParams=0x563f05e980d8) at postgres.c:847 #9 0x0000563f0373fb15 in pg_plan_queries (querytrees=0x563f05e60bb0, query_string=0x563f05ffd8d0 "DELETE FROM test_remote WHERE row(i,j)=row(new.i,new.j)", cursorOptions=2048, boundParams=0x563f05e980d8) at postgres.c:939 #10 0x0000563f038dade2 in BuildCachedPlan (plansource=0x563f06027590, qlist=0x563f05e60bb0, boundParams=0x563f05e980d8, queryEnv=0x0) at plancache.c:936 #11 0x0000563f038db4d8 in GetCachedPlan (plansource=0x563f06027590, boundParams=0x563f05e980d8, owner=0x563f05f6c478, queryEnv=0x0) at plancache.c:1218 #12 0x0000563f03542235 in _SPI_execute_plan (plan=0x563f060c9ac0, paramLI=0x563f05e980d8, snapshot=0x0, crosscheck_snapshot=0x0, read_only=false, allow_nonatomic=false, fire_triggers=true, tcount=0, caller_dest=0x0, plan_owner=0x563f05f6c478) at spi.c:2405 #13 0x0000563f0353ebb9 in SPI_execute_plan_with_paramlist (plan=0x563f060c9ac0, params=0x563f05e980d8, read_only=false, tcount=0) at spi.c:651 #14 0x00007f1032c2f504 in exec_stmt_execsql (estate=0x7ffcab5c6420, stmt=0x563f05bfb868) at pl_exec.c:4214 #15 0x00007f1032c2a9bc in exec_stmts (estate=0x7ffcab5c6420, stmts=0x563f05bfb8c0) at pl_exec.c:2059 #16 0x00007f1032c2b854 in exec_stmt_if (estate=0x7ffcab5c6420, stmt=0x563f06028700) at pl_exec.c:2481 #17 0x00007f1032c2a842 in exec_stmts (estate=0x7ffcab5c6420, stmts=0x563f06028758) at pl_exec.c:2003 #18 0x00007f1032c2a579 in exec_stmt_block (estate=0x7ffcab5c6420, block=0x563f060288c0) at pl_exec.c:1910 #19 0x00007f1032c29cac in exec_toplevel_block (estate=0x7ffcab5c6420, block=0x563f060288c0) at pl_exec.c:1608 #20 0x00007f1032c28730 in plpgsql_exec_trigger (func=0x563f05f6d940, trigdata=0x7ffcab5c6880) at pl_exec.c:1024 #21 0x00007f1032c43319 in plpgsql_call_handler (fcinfo=0x7ffcab5c6700) at pl_handler.c:268 #22 0x0000563f034a3e2a in ExecCallTriggerFunc (trigdata=0x7ffcab5c6880, tgindx=0, finfo=0x563f05e7aa60, instr=0x0, per_tuple_context=0x563f05c763d0) at trigger.c:2141 #23 0x0000563f034a7674 in AfterTriggerExecute (estate=0x563f05e7a2b0, event=0x563f05e1a580, relInfo=0x563f05e7a738, trigdesc=0x563f05e7a950, finfo=0x563f05e7aa60, instr=0x0, per_tuple_context=0x563f05c763d0, trig_tuple_slot1=0x0, trig_tuple_slot2=0x0) at trigger.c:4034 #24 0x0000563f034a7b8d in afterTriggerInvokeEvents (events=0x563f05f3c540, firing_id=1, estate=0x563f05e7a2b0, delete_ok=false) at trigger.c:4250 #25 0x0000563f034a8353 in AfterTriggerEndQuery (estate=0x563f05e7a2b0) at trigger.c:4587 #26 0x0000563f034dc8eb in standard_ExecutorFinish (queryDesc=0x563f060279a0) at execMain.c:436 #27 0x0000563f034dc7c5 in ExecutorFinish (queryDesc=0x563f060279a0) at execMain.c:404 #28 0x0000563f03745edc in ProcessQuery (plan=0x563f05fc8100, sourceText=0x563f05ad74a0 "DELETE FROM test WHERE i=1;", params=0x0, queryEnv=0x0, dest=0x563f05fc81f0, qc=0x7ffcab5c6cf0) at pquery.c:190 #29 0x0000563f037478fd in PortalRunMulti (portal=0x563f05b3aa50, isTopLevel=true, setHoldSnapshot=false, dest=0x563f05fc81f0, altdest=0x563f05fc81f0, qc=0x7ffcab5c6cf0) at pquery.c:1266 #30 0x0000563f03746e24 in PortalRun (portal=0x563f05b3aa50, count=9223372036854775807, isTopLevel=true, run_once=true, dest=0x563f05fc81f0, altdest=0x563f05fc81f0, qc=0x7ffcab5c6cf0) at pquery.c:786 #31 0x0000563f03740084 in exec_simple_query (query_string=0x563f05ad74a0 "DELETE FROM test WHERE i=1;") at postgres.c:1214 #32 0x0000563f03744c41 in PostgresMain (argc=1, argv=0x7ffcab5c6f10, dbname=0x563f05b02938 "contrib_regression", username=0x563f05b02918 "leoric") at postgres.c:4486 #33 0x0000563f03670f3a in BackendRun (port=0x563f05af8f00) at postmaster.c:4507 #34 0x0000563f036707f3 in BackendStartup (port=0x563f05af8f00) at postmaster.c:4229 #35 0x0000563f0366c97c in ServerLoop () at postmaster.c:1745 #36 0x0000563f0366c115 in PostmasterMain (argc=8, argv=0x563f05ad1820) at postmaster.c:1417 #37 0x0000563f0356193d in main (argc=8, argv=0x563f05ad1820) at main.c:209 (gdb) print *subplan $2 = {type = T_Result, startup_cost = 0, total_cost = 0, plan_rows = 0, plan_width = 0, parallel_aware = false, parallel_safe = false, async_capable = false, plan_node_id = 0, targetlist = 0x563f06020d40, qual = 0x0, lefttree = 0x0, righttree = 0x0, initPlan = 0x0, extParam = 0x0, allParam = 0x0} -- Best regards, Alexander Pyhalov, Postgres Professional --=_f958fa8ce8044f198cc2445beec168b5 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=check_postgres_fdw_crash.patch Content-Disposition: attachment; filename=check_postgres_fdw_crash.patch; size=1322 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggOTExZjE3MWQ4 MTIuLjdkNTA1MTQwNmEyIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3 LnNxbApAQCAtMzM1NSwzICszMzU1LDMxIEBAIENSRUFURSBGT1JFSUdOIFRBQkxFIGludl9mc3og KGMxIGludCApCiAtLSBJbnZhbGlkIGJhdGNoX3NpemUgb3B0aW9uCiBDUkVBVEUgRk9SRUlHTiBU QUJMRSBpbnZfYnN6IChjMSBpbnQgKQogCVNFUlZFUiBsb29wYmFjayBPUFRJT05TIChiYXRjaF9z aXplICcxMDAkJSQjJCMnKTsKKworQ1JFQVRFIFRBQkxFIHRlc3QgKGkgaW50LCBqIGludCk7CitD UkVBVEUgVEFCTEUgdGVzdF9iYXNlIChpIGludCwgaiBpbnQpOworSU5TRVJUIElOVE8gdGVzdCBW QUxVRVMgKDEsMiksKDMsNCk7CitJTlNFUlQgSU5UTyB0ZXN0X2Jhc2UgVkFMVUVTICgxLDIpLCgz LDQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgdGVzdF9yZW1vdGUgKGkgaW50LCBqIGludCkKKyAg ICAgICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAndGVzdF9iYXNlJyk7CitD UkVBVEUgRlVOQ1RJT04gdXBkYXRlX3Rlc3QoKQorUkVUVVJOUyB0cmlnZ2VyCisgTEFOR1VBR0Ug cGxwZ3NxbAorQVMgJGZ1bmN0aW9uJAorREVDTEFSRQorICByZWMgcmVjb3JkOworICB0bmFtZSB0 ZXh0OworQkVHSU4KKyAgSUYgKFRHX09QID0gJ0RFTEVURScpIFRIRU4KKyAgLS0gcmVmZXJlbmNl IHRvIG5ldyBpbnN0ZWFkIG9mIG9sZAorICAgIERFTEVURSBGUk9NIHRlc3RfcmVtb3RlIFdIRVJF IHJvdyhpLGopPXJvdyhuZXcuaSxuZXcuaik7CisgIEVMU0lGIChUR19PUCA9ICdJTlNFUlQnKSBU SEVOCisgICAgSU5TRVJUIElOVE8gdGVzdF9yZW1vdGUgVkFMVUVTKG5ldy5pLCBuZXcuaik7Cisg IEVMU0lGIChUR19PUCA9ICdVUERBVEUnKSBUSEVOCisgICAgVVBEQVRFIHRlc3RfcmVtb3RlIFNF VCBpPW5ldy5pLCBqPW5ldy5pIFdIRVJFIGk9b2xkLmkgQU5EIGo9b2xkLmo7CisgIEVORCBJRjsK KyAgUkVUVVJOIE5VTEw7CisgIEVORDsKKyRmdW5jdGlvbiQ7CitDUkVBVEUgVFJJR0dFUiB0Z191 cGQgQUZURVIgSU5TRVJUIE9SIERFTEVURSBPUiBVUERBVEUgT04gcHVibGljLnRlc3QgRk9SIEVB Q0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gdXBkYXRlX3Rlc3QoKTsKK0RFTEVURSBGUk9NIHRlc3Qg V0hFUkUgaT0xOwo= --=_f958fa8ce8044f198cc2445beec168b5--