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 1wD8ur-002eCj-0u for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 22:41:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wD8up-002bd1-0Q for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2026 22:40:59 +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 1wD8uo-002bcs-2Q for pgsql-hackers@lists.postgresql.org; Wed, 15 Apr 2026 22:40:58 +0000 Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wD8um-00000001Iiz-2XXh for pgsql-hackers@postgresql.org; Wed, 15 Apr 2026 22:40:58 +0000 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-7dbce74e537so5681789a34.1 for ; Wed, 15 Apr 2026 15:40:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776292853; cv=none; d=google.com; s=arc-20240605; b=dYPsReDPrhvrqiWOa7uzXVVyLXGTyAnUr53atykyjx0bjm2YMYVQQVgEycZFbqjgRE 0KyXhNAvwqjw0R5kyQCJBIE0Fj7uMHHNSeaJ9I02iD2NWppv7hBG5XCENwfPlOEyV+we YN/b+ymaoi6C5Mu8wegFa6x2c2y2XsAka8LaPjpqiXfgovkZmDQ9dkOht+kohujAFJFP AfB35IqDQEWhTpUjrVzyQIMoW6L1N0bu3rt/tYx2aG6rquf0y6fUGwvshan9f6xznsv4 So4FPPZU4NVQ9jpnq/4WIBW++pT34XezUVkmYJc4xFuk1RwtIp+yvZuwgCjjPmGT48Qr TMTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=7yPYAQLghMyIXRhJYmp4aiP6xY6Jx7maqNyH6OSZMaw=; fh=pLxplykOVmueG8jWb0AP9WMK7qQaCFFgNAd3//KD9V8=; b=YNTD7aQjCUvIjo6xIBK9kAzEVpEhblci4maICj6HDPnG/gezqBPBmSxp8II0LC+8qM 36RGm7yStro+aUIjuws/i+nzQflfNq9uNDVhm8SWj7MSe+repSf0Hl4seJQIeYsTocts gerLAdeIu0fiQRfiVa0SSEbFDN4O+L5C2S7xnj/oxv/AmbwFz/bXddGJWm94k8Ybegv7 7VxzEEqFlYCrxuBDDfE2mNbwtuImANKrBKPp+gA9mCSsZT9B5j44aGnqm0AgPd76AY8e iYOfrg0gPnq0+lCtPs3lsevS6KxrtlvdUHR0MB0KDpBvrXLrcIx0B04XWbh8EVCMh+Q7 no6w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=illuminatedcomputing-com.20251104.gappssmtp.com; s=20251104; t=1776292853; x=1776897653; darn=postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=7yPYAQLghMyIXRhJYmp4aiP6xY6Jx7maqNyH6OSZMaw=; b=Oa+kYd+S56sgpQDR1rnTw5q+tfEbOlbSI8A60KzPSJZlDR3BVvFlT2bZJg7MP+Cvli ZzRwbAzzSFTdyHg1/xYXX/wIAr68mUCBbxv7uH23OBSyKdK5T2PL+gAJjAN/4Pu62QZ6 4JnlYosknzWccmCMee3ctwfIrLu2sMDy0mXiTg5p9uECiYzFCB6ESoXNosn90LOMyvg0 RHuaCvtoZ2SCY8AgaIHuwvgU3xYJ4DIOPHa3/tfOmkANfnXaCwKC/2bmEt/5umI7yJoQ qqzUWRb6TaG8bZXtl1nYCBVslx1rFvTImXWGIym3FvNyxko9MmfO0vB3MUpKaYr4TkHD eOJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776292853; x=1776897653; h=content-transfer-encoding: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=7yPYAQLghMyIXRhJYmp4aiP6xY6Jx7maqNyH6OSZMaw=; b=L8t8dt4pCfxW/rsvTERGpLfksyntrXt8emFM7808fuxGd8QpQ9vM2LSOrhz+fnUUWI ZBM37I5SIRokozfVRI/emQU74Nt5/OG9KskqQMu/ZTgQVvI1aYVwGukyeDxtNdIKCgU5 cYt82hjNl8bBC7Tp+p5ksErPTybi6cDQswu5jORtLfvLCPrSdoMC8baGnzugLS7JuEVv 7Pz6antXxeX8SSco0eojDqijnBfaODL5PzJd6/84c8c4qwI/xuNpJGtdD2rrBJssWtbe wOGcAB2zOAVB+v23WZA0bTO3v7ei/jZ3a8t4Znjpzc/fhAe/eEw9hTTAEP7o0Ilm0gkD ZK+Q== X-Forwarded-Encrypted: i=1; AFNElJ9EumnOX8etBxsa6qbN/NPLRzd3Kp78GslzROfhqKfS462OsCnm0+T1wboRcVpfbKfoghRSTcZU5y8WsmX0@postgresql.org X-Gm-Message-State: AOJu0YyTaMLU3ZShDY1Gl+q54gIbviWgbjEyGkcUTtkXsqGT3coAbJ1z 6HcvreDAYGwF3hQunX1vJZbrgbNpO905Zcm5S6NZGh1N8cQKcjncV3pcAkwNfa4PteNlPJUlx/r fnsAuDzfGkvMqqaFjB2Pn1egAyJlAnl58BeUxWfYlHg== X-Gm-Gg: AeBDietapnhaG6kmx16lDhmCmhXX8vxgVyMVaFhrcx1x1i8rVaYaimmewhoTi+wc28f +4CeYe9RQQfNFoG9zNxHIznDzHRw1Df3pDkdHNkBEkA+0PMPuw+QlU+5GPDFTGq+EBf3V9kAlK3 s76zpGtZ61MUP7atE58dMgL46L9L2zTnFk/osu3s3rMdp5MgIazRhf8RA+fwbrMw3fVU2z08Ok9 VbQdmkH7HJf4w9qWtG3KobzK/gudHElMrTRBv6uNV9RhbYSKw6sogYsDcYWGx51ZpqvDUAn7suF bEi9oz9K9QfdX3g= X-Received: by 2002:a05:6820:6004:b0:68b:dbb1:20fe with SMTP id 006d021491bc7-68be88e20e1mr8444616eaf.50.1776292853481; Wed, 15 Apr 2026 15:40:53 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Paul A Jungwirth Date: Wed, 15 Apr 2026 15:40:41 -0700 X-Gm-Features: AQROBzA7AkiEDZw0cOf1NjipfrPbCEROdW5S7cQyA0tSKWrq7CXjU6RcujgJhKU Message-ID: Subject: Re: DELETE/UPDATE FOR PORTION OF with rule system is not working To: jian he Cc: Kirill Reshke , PostgreSQL-development , Peter Eisentraut Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, Apr 13, 2026 at 2:01=E2=80=AFAM jian he wrote: > > hi. > Actually it's supported. I also don't see any reason not to support this. > 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. Thank you for investigating and sending a fix. The patch looks fine to me. I like the diversity of tests; I don't think we need any more. +-- UPDATE/DELETE FOR PORTION OF with RULEs +CREATE TABLE fpo_rule (f1 bigint, f2 int4range); +INSERT INTO fpo_rule VALUES (1, '[1, 10]'); + +CREATE RULE fpo_rule1 AS ON INSERT TO fpo_rule DO INSTEAD UPDATE fpo_rule FOR PORTION OF f2 FROM 1 TO 4 SET f1 =3D 2; +INSERT INTO fpo_rule VALUES (1, '[1, 10]'); +SELECT * FROM fpo_rule ORDER BY f1; I only have two small suggestions: Please use '[1, 11)' syntax to match the other tests. Breaking these long lines would be nice. For example: +CREATE RULE fpo_rule1 AS ON INSERT TO fpo_rule + DO INSTEAD UPDATE fpo_rule FOR PORTION OF f2 FROM 1 TO 4 SET f1 =3D 2; Yours, --=20 Paul ~{:-) pj@illuminatedcomputing.com