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 1wCIvp-001quk-21 for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 15:10:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wCIvn-007Zcr-2l for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Apr 2026 15:10:32 +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 1wCIvn-007Zci-1u for pgsql-hackers@lists.postgresql.org; Mon, 13 Apr 2026 15:10:32 +0000 Received: from mail-dl1-x1234.google.com ([2607:f8b0:4864:20::1234]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wCIvm-00000000oij-1jJ1 for pgsql-hackers@postgresql.org; Mon, 13 Apr 2026 15:10:31 +0000 Received: by mail-dl1-x1234.google.com with SMTP id a92af1059eb24-126ea4b77adso12435371c88.1 for ; Mon, 13 Apr 2026 08:10:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776093030; cv=none; d=google.com; s=arc-20240605; b=Eja2gjvBdYwb/bGysn5brEmrp3SrEQjJmEpNopD3d9eQLAgjevpAvtmsmGUcZzhdui k0r5bExt1zC4ApUw7D4+baVfJmVlrnlnKUTFCuIQGxNgdyXC+zDSPTX1lnmErTynXVEE qAec3g/Tz6t6d6bQVdjodGnN3c5PPUYZzmRUjgIsI715sQSz8JpSJYIpoy8vY729ckwe Uq6o54BYO+h7XoEeZqgMCqL0FfkyXj0+yE0U370nDAJKArrenbZIySQrIIv2orSShK2u wdlttnCIYkFazvBRVSJ51zkTNtVLj8grUKYw5nz/qyVZeszyboU7ap4b1VocaKfCtQcy RkmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=WfeelNF+utEQzNtYAeTmpM7+O+rJY7xKJpptmuOzldU=; fh=lXsrIfQmoV/vBWgETkjvSmc9ozHP6WKVZmpA6+BSdAA=; b=GpUKrDL+kho5VEgVbYAaEWVuc8nd4/LacDx/wHclIxSXnMrYgg3G2sllpOEXP5XJ9Z uDjSte6dpNWNuBhcOJKu+B3dAQwnAprTCkNt+cjVrcVDSnrUXd26RqT06lTL/QKDBy03 kS1EwSTgDku+Hb+U5l66EBtOcNGrXz8bysvDh7miWFOKZ6k4B/2I/HoESUxc++EoBKT+ v34BEVLuwhTjA+F0WWHyd0drWZTCkTH/SnYZ82rSt72DVJaKz+mZ1Tt471YJwGk9iu4W jq07s7t9UP9pO9c6vHakvsR9tydiNF7/+QTAROIVGmGxPy0gYPu1H7QABD1gEkrzRLik hl8A==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776093030; x=1776697830; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WfeelNF+utEQzNtYAeTmpM7+O+rJY7xKJpptmuOzldU=; b=pLsVQnzcLrCZYxUDCGbrAXJt+xBCj0zboV4jEM2v5TAJBmlGmM1K8Xf98Pt57P9gza 5AuqNmfXoRini2QovKCxRadE49/IkimsDpsEtZA1EVoXFGAZIvvS9OXfNHioUkDeg0sZ dvKIpyW2S3BEzfANGJgSyYi2SdpPAz2UwWo1gPRS46IbTcf6locJBoxSJwyA6Marq8ds /T5TgOqV4KsCiE3trIWiEDS1yxiVgGXAIRsbHyiXzALa//7hZnjgGD+IbLiakFit+QpU 6Z6b0UaJtPFuOjdosg+JW/bNjAkj1jBVG7K+YW+4/i1rWaj5pc+Jn/GhKmBNXirD/Bqb 9dqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776093030; x=1776697830; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=WfeelNF+utEQzNtYAeTmpM7+O+rJY7xKJpptmuOzldU=; b=CuL8TYpDiAKBQAO+3W798xBkjuQlPN/1sCYZM08a4dEST0TO+1I7cg8ADsPXkgTFow pJ2w8gcLqQi4dlKmowFoh4XYSkkFNMBIhBCF0NB2o46ZJBzhxQStrQ+Kr6cZaU+aWZkn fUl6KMgxuYJnHObth7wH6mQyDs4IV1+Yo1DnG/KU83o65Cp0v6H09Qwt1DjeduulwKNQ 6m1J2bck/R+IqomeZ2wjS+eO3p6wQ4WR7yrS4e2BRitNmUv1JySH7SE01VdS+GsctDpB QBIy79E8H6LFU4IMReOXu/8y5LOSztzZw7+m7NdNnbGmg7euGyfvx4EUY5XIHlPiCUav 3GTw== X-Gm-Message-State: AOJu0YzZR7qtbwLWVVkkFJxkVGOs0s4W7nUf+cIyZTsnlxtSHBr3DE/f vYXnx9kHab6InNlIKlW7LuXJ6mlEQ/oUrDPVwYEdxkuN52s5vpVWCjXLOxMIG+B35jZ/TzZq/Hs XTNMkFtzLdyT9HXdh7Cx90pPcHdwxm18= X-Gm-Gg: AeBDieslIIBrns98HmrBXEL69AIip9Ta9nE6Hk6TAI2KCCAHPiMk5rfnNJztMXtaMzi N2vcwGAncBOomNgtTCcCoxs6S1+BD0QzOlffhxPWWwrNIIWjkSc95E9rjyjbUpcao4mpq5tLx47 8VgOTnn2UJ7K9r1YVQg9tDHQ13RZu+jzFrFCJkkVRfeog4MF533K5S3DpfzgGlp6OSK11COCS0y JgKE8RUTOv1LVbVImeMu0Q9dbUD0W6GfHmV+uKTFGalYM7NGnJZBOyqYUHBYo76b4DlY41cboiK d94WdmXakRveAOT2AF7wxc8jj1YpEhavbQdm4k0EpE4M+9qcjUDlql312PE3JyAE6f4/L7MFv63 wLYa9 X-Received: by 2002:a05:7022:6890:b0:12a:6c7e:bef9 with SMTP id a92af1059eb24-12c34e8a110mr7411432c88.9.1776093029901; Mon, 13 Apr 2026 08:10:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Kirill Reshke Date: Mon, 13 Apr 2026 20:10:17 +0500 X-Gm-Features: AQROBzC7O6GQmtO5UExq217YsE0Ei3mBPmy-9s1cWlol2SxZR9YNd7Z0agjO1LI Message-ID: Subject: Re: DELETE/UPDATE FOR PORTION OF with rule system is not working To: jian he Cc: PostgreSQL-development , Paul A Jungwirth , Peter Eisentraut Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, 13 Apr 2026 at 14:01, jian he wrote: > > hi. > Actually it's supported. > > The issue mentioned in the first email is caused by: > https://git.postgresql.org/cgit/postgresql.git/commit/?id=8e72d914c52876525a90b28444453de8085c866f > https://git.postgresql.org/cgit/postgresql.git/diff/src/backend/nodes/nodeFuncs.c?id=8e72d914c52876525a90b28444453de8085c866f > > --- a/src/backend/nodes/nodeFuncs.c > +++ b/src/backend/nodes/nodeFuncs.c > @@ -2579,6 +2579,20 @@ expression_tree_walker_impl(Node *node, > return true; > } > break; > + case T_ForPortionOfExpr: > + { > + ForPortionOfExpr *forPortionOf = (ForPortionOfExpr *) node; > + > + if (WALK(forPortionOf->targetFrom)) > + return true; > + if (WALK(forPortionOf->targetTo)) > + return true; > + if (WALK(forPortionOf->targetRange)) > + return true; > + if (WALK(forPortionOf->overlapsExpr)) > + return true; > + } > + break; > > We forgot to WALK (expression_tree_walker_impl) > ForPortionOfExpr->rangeVar and ForPortionOfExpr->rangeTargetList. > We need to WALK those two fields of ForPortionOfExpr in > rewriteRuleAction (ChangeVarNodes, > ReplaceVarsFromTargetList, etc.), and maybe elsewhere. > > i am surprised that nothing else has broken because of this. > > > > -- > jian > https://www.enterprisedb.com/ This fix looks valid for me. Also, are all 4 new test cases really needed? If yes, why are we missing ON DELETE TO ... DO INSTEAD INSERT ? -- Best regards, Kirill Reshke