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 1wDeL3-003Cj0-26 for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Apr 2026 08:14:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDeL2-0094Z9-2O for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Apr 2026 08:14:08 +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 1wDeL2-0094Z1-12 for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 08:14:08 +0000 Received: from mail-vk1-xa36.google.com ([2607:f8b0:4864:20::a36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDeKz-00000001RVe-4AcX for pgsql-hackers@lists.postgresql.org; Fri, 17 Apr 2026 08:14:07 +0000 Received: by mail-vk1-xa36.google.com with SMTP id 71dfb90a1353d-56f3e6bbecdso132107e0c.2 for ; Fri, 17 Apr 2026 01:14:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776413645; cv=none; d=google.com; s=arc-20240605; b=NjFTIdoI9CNXDS8ejZwxZkorz6fos6Z1JgmZePCMCIYkLCf4FsEg2PoLTq2gFOAdY0 unWP/qe4YR6d4yga9xGVYrNpkiMFcoXphutmu5gQ02FgpcY21JvunAa6WJQ29PVoHzd0 WfJe84za5GnlAlj+L+8adDi9owB60pqZlhTjRAe+gs1uXvmcDD8MsjiM5AOCEAr3J5YS DwGqg4L2pKnkgocivvhLAc4FbXscaKv/VcKuf7xKz1YsrOT/56B4EtNE49PBxFVfHgZ9 MmACxQIABgmSZBIv0qr4RCbZIzna6BBMFoSubpYMdJFpYqhzUmGBsbj5N470oQnJqM4M x7Pg== 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=GWNHH3iKAeXo7Lv0SJYUKsyftd94JNxMUXKn9IcapxY=; fh=PLCHqL6FQkILkAfCOoSdg9XDCWZREMAuvvDqcTIv7ls=; b=GITiL1wmu/cigE5GLjM6H2h0NujymIncT63zY0wV0x62XwdqRe5FmE70LCld4aWDH2 51PfixibM1B1rvgIbuEW9mTd6xFZRHohZOOyhPAzUl+3FHcQG5aivRMiPDFcTa5eoRVx wqxnAFKvGyPnv5C3EDFfOAMh2EoUHe2ouQNSfLrb4Q0HtsYghD4/l0W/pwcnyHoQrSSR M1Vyqm0emXHBrhY5Q5m+OEwD8HuZ6H7oWwde8yMnId6duqXMIXJgoGgTV6S4bnDeFL9j R8RqGWVA6ngjAOKCrz4PM7f1zBSOMWn087onB6lmtxGlLKMwhSSXycOnPN/oYl7LyC0n PfvA==; darn=lists.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=1776413645; x=1777018445; darn=lists.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=GWNHH3iKAeXo7Lv0SJYUKsyftd94JNxMUXKn9IcapxY=; b=FN2yESo0v8XxM2wM248XaZgyuhaUmbfpcc7EkTN3n1S4JlPPdnhcsOi9w2rGrstoio jangv9GZ3qWc+eYdMtMhUkVWGRX9s3tO5RECzRWDi0BRYeEAQ1ic+/J8Aw/ZC6C+QElx +SPml0PDZFVDN1cFeYBrJiyxok2O84cRp8MXbX5B6JgCDkop6ADN+xpJHSvtAMzp/nVS 3McjnEl/CDJze0MNiPmoAqDMappvAJeYZ/LFvtMHEBQjNrIwOErz/W6MVloA0gL0cF1A J9twtZ/Eu0wZBgInZpL00OrDYyaZsdkWzopqf6jHuDnkhlZQk4GXq1nWu6SOLUGk5rg9 8t7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776413645; x=1777018445; 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=GWNHH3iKAeXo7Lv0SJYUKsyftd94JNxMUXKn9IcapxY=; b=RJX7XNHcoqVZn4NQATXJMpgqd81hMj0v9wHQT1Qgzobg54UQBeQtLbipS+RK39lMBl KzXGZHIk6irhDTkQ1ORwM6um8tBEgzHMl2A8L9EAsw18nqB9L0lIygeDrw6RkgSymzDb qg+Sx6k3g72EL9EdWR2yPrnIRLSY30PA8aN1Ad/I+kvxzLf8/SNgdMQOx3REn8ja84rI /1QfLUTaFMYQMSl27wnp9h98eet+ml9co3wBPZpUh5eBttseMd4KAY582k0BeKkkUSnU 5KZxWAtLturToU/szlGGNo9p7+fsiqOhiggxKOZCai+kIjrRTcDLglFn81DisJusOfbv vhZg== X-Forwarded-Encrypted: i=1; AFNElJ9PvFyoq0SlFGNLB9r/zB96zWoDGbq+BaCD17gBNa47Zf4Cuv1m8hIngaNUzZEqwDfA9qEB1OvN8/Cua9qg@lists.postgresql.org X-Gm-Message-State: AOJu0YyMHKzCeLZV34VcQKdqNOSpxzBhZmHU+uwKZ93oNNFOA8TVCIWU RSaKEdrcHqMZHiwJyYZUOxbortSrq/FX4Yuaupcar2G9HOIxIHGb31U4lD/I9bBsio0Zqk008m/ kUovDu370OBh4A9UWc5cXqEJxbqTEEUfodKGWqjZFCQ== X-Gm-Gg: AeBDiesbU0LpaHLPWJXqrNMleaa4hCUV/vzSfG6bU4fpnCoY7kmr3+FT1zhk5u2JL1P j+gr1Xeqp/8qhLazyJUHl/z428AlicKFbNJip9m2pAi0/TV96GCncKVm0rMzuDVfvsYdjyZ3G6d +WgDX1FeBjcdmdhUqSPJBUoJSCORr74Kx3Gmy8243z2qR59XjQlKFfH3qtWpo2dsX8EvFp2mAxl wf0kgeiqScoCb937eUKgn3O3bQ3AyPGIMIfHofg0s/qP5qKJUrRLto84p19arUSxASity4P5JLG SbxjyLcNjz1qk2DdCum2EOl9RYdQx4zinlrDHK+ThYm7Wc9NMhUSEx+YmQpadNYWDkfSX8b0Bhg MVfZINyNwQi/UoMD/6I4UnB/pSNuWT1eg7aKSMLVdNNriTheI8IZHwdR6lpM6Y7OA1G2/XYE4t/ SXBkWwPDz6qM61VRIZJJ7K960B5kC31JqX X-Received: by 2002:a05:6122:608b:b0:566:23dd:19b9 with SMTP id 71dfb90a1353d-56fa57f8ec1mr635862e0c.3.1776413645436; Fri, 17 Apr 2026 01:14:05 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Fri, 17 Apr 2026 16:13:28 +0800 X-Gm-Features: AQROBzD09C2VayCgRd3i3q65NGkfB6lNdb1eUzNmryIXQTBOmjpKLzthD73I4zc Message-ID: Subject: Re: FOR PORTION OF does not recompute GENERATED STORED columns that depend on the range column To: Paul A Jungwirth Cc: SATYANARAYANA NARLAPURAM , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000004f9560064fa38891" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004f9560064fa38891 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 16, 2026 at 4:59=E2=80=AFAM Paul A Jungwirth wrote: > > There's something I think we could still improve: we omit the > valid-time in updatedCols, since that bitmapset is for permissions > checking (at least originally), but now other features are using it as > well. Our fix adds special logic to consider the valid-at column for > GENERATED column dependencies and more special logic for UPDATE OF > triggers. Perhaps we should add the attno to updatedCols after all, > and put the special logic in the permissions check instead? That seems > simpler and more robust. Or maybe it's time to have separate > bitmapsets, one for permissions and another for everything else? What > do you think? > + /* + * For UPDATE ... FOR PORTION OF, the range column is also being modified + * (narrowed via intersection), but it is not included in updatedCols + * because the user does not need UPDATE permission on it. We must + * account for it here so that generated columns referencing the range + * column are recomputed. + */ + if (resultRelInfo->ri_forPortionOf) + { + AttrNumber rangeAttno =3D resultRelInfo->ri_forPortionOf->fp_rangeAttno; + + updatedCols =3D bms_add_member(bms_copy(updatedCols), + rangeAttno - FirstLowInvalidHeapAttributeNumber); + } + Putting the above into ExecGetUpdatedCols would be more neat. InitPlan->ExecCheckPermissions happened earlier than ExecGetUpdatedCols, So I think it will work. Another reason to do it this way is that some places only call ExecGetUpdatedCols, not ExecGetExtraUpdatedCols. Put the above into ExecGetUpdatedCols, then we don't need to worry about whether ExecGetExtraUpdatedCols is called. ExecGetExtraUpdatedCols saves the ri_extraUpdatedCols to estate->es_query_c= xt. For ExecGetUpdatedCols, we can do the same: save the FOR PORTION OF column to estate->es_query_cxt. Please find the attached diff, which is based on your V3 patch. ExecForPortionOfLeftovers /* * Get the range's type cache entry. This is worth caching for the whol= e * UPDATE/DELETE as range functions do. */ typcache =3D fpoState->fp_leftoverstypcache; if (typcache =3D=3D NULL) { typcache =3D lookup_type_cache(forPortionOf->rangeType, 0); fpoState->fp_leftoverstypcache =3D typcache; } It seems fp_leftoverstypcache is never being used? place it to ExecInitModifyTable would be better, i think. /* * Get the ranges to the left/right of the targeted range. We call a SE= TOF * support function and insert as many temporal leftovers as it gives u= s. * Although rangetypes have 0/1/2 leftovers, multiranges have 0/1, and * other types may have more. */ Currently, we only support anymultirange and anyrange. so here "and other types may have more." is kind of wrong? -- jian https://www.enterprisedb.com/ --0000000000004f9560064fa38891 Content-Type: application/octet-stream; name="v4-0001-add-UPDATE-FOR-PORTION-OF-col-to-ExecGetUpdatedCols.no-cfbot" Content-Disposition: attachment; filename="v4-0001-add-UPDATE-FOR-PORTION-OF-col-to-ExecGetUpdatedCols.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo2mro3r0 RnJvbSAyMjIwNTZlYzBjZTAzNzRmY2FhOWY2NGFjNzNlYzA4OTZhYzk3OWMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTcgQXByIDIwMjYgMTY6MDM6NDQgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDEvMV0gYWRkIFVQREFURSBGT1IgUE9SVElPTiBPRiBjb2wgdG8gRXhlY0dldFVwZGF0ZWRDb2xz CgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSGcrUURjZD10NjlnTGY5eVFleE8w N0VKMm14MFo3ME5GSG82aDk0WDFFREE9aE0wZ0BtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBSGcrUURjc1hzVVZhWitKd00wMnlEUlFFaT1jTF9yVEhfUk9M RFlnT3gwMDRzUXU3QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNVdGlscy5jICAgICAgIHwgNDcgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIHwgMTUgLS0tLS0tLS0KIDIgZmlsZXMgY2hh bmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj VXRpbHMuYwppbmRleCA1ZGY3ZjJlZGY4NS4uMmMwYWIxYzAyMTQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNVdGlscy5jCkBAIC0xNDEyLDYgKzE0MTIsMzEgQEAgRXhlY0dldFVwZGF0ZWRDb2xzKFJlc3Vs dFJlbEluZm8gKnJlbGluZm8sIEVTdGF0ZSAqZXN0YXRlKQogCWlmIChwZXJtaW5mbyA9PSBOVUxM KQogCQlyZXR1cm4gTlVMTDsKIAorCS8qCisJICogRm9yIFVQREFURSAuLi4gRk9SIFBPUlRJT04g T0YsIHRoZSByYW5nZSBjb2x1bW4gaXMgYmVpbmcgbW9kaWZpZWQKKwkgKiAobmFycm93ZWQgdmlh IGludGVyc2VjdGlvbiksIGJ1dCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdXBkYXRlZENvbHMKKwkg KiBiZWNhdXNlIHRoZSB1c2VyIGRvZXMgbm90IG5lZWQgVVBEQVRFIHBlcm1pc3Npb24gb24gaXQu IE5vdyBtYW5udWFseQorCSAqIGFkZCBpdCB0byB1cGRhdGVkQ29scy4KKwkgKi8KKwlpZiAocmVs aW5mby0+cmlfZm9yUG9ydGlvbk9mKQorCXsKKwkJQXR0ck51bWJlcglyYW5nZUF0dG5vID0gcmVs aW5mby0+cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vOworCisJCWlmICghYm1zX2lzX21l bWJlcihyYW5nZUF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKKwkJ CQkJCSAgIHBlcm1pbmZvLT51cGRhdGVkQ29scykpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xk Q29udGV4dDsKKworCQkJb2xkQ29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlc3RhdGUt PmVzX3F1ZXJ5X2N4dCk7CisKKwkJCXBlcm1pbmZvLT51cGRhdGVkQ29scyA9CisJCQkJYm1zX2Fk ZF9tZW1iZXIocGVybWluZm8tPnVwZGF0ZWRDb2xzLAorCQkJCQkJCSAgIHJhbmdlQXR0bm8gLSBG aXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKworCQkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZENvbnRleHQpOworCQl9CisJfQorCiAJLyogTWFwIHRoZSBjb2x1bW5zIHRvIGNo aWxkJ3MgYXR0cmlidXRlIG51bWJlcnMgaWYgbmVlZGVkLiAqLwogCWlmIChyZWxpbmZvLT5yaV9S b290UmVzdWx0UmVsSW5mbykKIAl7CkBAIC0xNDMwLDI5ICsxNDU1LDcgQEAgRXhlY0dldEV4dHJh VXBkYXRlZENvbHMoUmVzdWx0UmVsSW5mbyAqcmVsaW5mbywgRVN0YXRlICplc3RhdGUpCiB7CiAJ LyogQ29tcHV0ZSB0aGUgaW5mbyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSAqLwogCWlmICghcmVsaW5m by0+cmlfZXh0cmFVcGRhdGVkQ29sc192YWxpZCkKLQl7Ci0JCWlmIChyZWxpbmZvLT5yaV9mb3JQ b3J0aW9uT2YpCi0JCXsKLQkJCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKLQotCQkJQXR0ck51 bWJlcglyYW5nZUF0dG5vID0gcmVsaW5mby0+cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5v OwotCi0JCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVl cnlfY3h0KTsKLQotCQkJLyoKLQkJCSAqIEZvciBVUERBVEUgLi4uIEZPUiBQT1JUSU9OIE9GLCB0 aGUgcmFuZ2UgY29sdW1uIGlzIGFjdHVhbGx5Ci0JCQkgKiBiZWluZyBtb2RpZmllZCAobmFycm93 ZWQgdmlhIGludGVyc2VjdGlvbiksIGJ1dCBpdCBpcyBub3QKLQkJCSAqIGluY2x1ZGVkIGluIHVw ZGF0ZWRDb2xzIGJlY2F1c2UgdGhlIHVzZXIgZG9lcyBub3QgbmVlZCBVUERBVEUKLQkJCSAqIHBl cm1pc3Npb24gb24gaXQuIFNvIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHJpX2V4dHJhVXBkYXRlZENv bHMKLQkJCSAqLwotCQkJcmVsaW5mby0+cmlfZXh0cmFVcGRhdGVkQ29scyA9Ci0JCQkJYm1zX2Fk ZF9tZW1iZXIocmVsaW5mby0+cmlfZXh0cmFVcGRhdGVkQ29scywgcmFuZ2VBdHRubyAtIEZpcnN0 TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOwotCi0JCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkQ29udGV4dCk7Ci0JCX0KLQogCQlFeGVjSW5pdEdlbmVyYXRlZChyZWxpbmZvLCBlc3Rh dGUsIENNRF9VUERBVEUpOwotCX0KIAlyZXR1cm4gcmVsaW5mby0+cmlfZXh0cmFVcGRhdGVkQ29s czsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxl LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCA0Mzk1MDg5 NTY1Zi4uN2FmMDI2ODY0NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVN b2RpZnlUYWJsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5j CkBAIC00NzcsMjEgKzQ3Nyw2IEBAIEV4ZWNJbml0R2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJl c3VsdFJlbEluZm8sCiAJZWxzZQogCQl1cGRhdGVkQ29scyA9IE5VTEw7CiAKLQkvKgotCSAqIEZv ciBVUERBVEUgLi4uIEZPUiBQT1JUSU9OIE9GLCB0aGUgcmFuZ2UgY29sdW1uIGlzIGFsc28gYmVp bmcgbW9kaWZpZWQKLQkgKiAobmFycm93ZWQgdmlhIGludGVyc2VjdGlvbiksIGJ1dCBpdCBpcyBu b3QgaW5jbHVkZWQgaW4gdXBkYXRlZENvbHMKLQkgKiBiZWNhdXNlIHRoZSB1c2VyIGRvZXMgbm90 IG5lZWQgVVBEQVRFIHBlcm1pc3Npb24gb24gaXQuICBXZSBtdXN0Ci0JICogYWNjb3VudCBmb3Ig aXQgaGVyZSBzbyB0aGF0IGdlbmVyYXRlZCBjb2x1bW5zIHJlZmVyZW5jaW5nIHRoZSByYW5nZQot CSAqIGNvbHVtbiBhcmUgcmVjb21wdXRlZC4KLQkgKi8KLQlpZiAocmVzdWx0UmVsSW5mby0+cmlf Zm9yUG9ydGlvbk9mKQotCXsKLQkJQXR0ck51bWJlcglyYW5nZUF0dG5vID0gcmVzdWx0UmVsSW5m by0+cmlfZm9yUG9ydGlvbk9mLT5mcF9yYW5nZUF0dG5vOwotCi0JCXVwZGF0ZWRDb2xzID0gYm1z X2FkZF9tZW1iZXIoYm1zX2NvcHkodXBkYXRlZENvbHMpLAotCQkJCQkJCQkJIHJhbmdlQXR0bm8g LSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKLQl9Ci0KIAkvKgogCSAqIE1h a2Ugc3VyZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGJ1aWx0IGluIHRoZSBwZXItcXVlcnkg bWVtb3J5CiAJICogY29udGV4dCBzbyB0aGV5J2xsIHN1cnZpdmUgdGhyb3VnaG91dCB0aGUgcXVl cnkuCi0tIAoyLjM0LjEKCg== --0000000000004f9560064fa38891--