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 1wWXEf-002gQQ-2W for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 10:29:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wWXEe-001v9E-26 for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 10:29:36 +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 1wWXEe-001v96-0n for pgsql-hackers@lists.postgresql.org; Mon, 08 Jun 2026 10:29:36 +0000 Received: from mail-ua1-x931.google.com ([2607:f8b0:4864:20::931]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wWXEc-00000001ff0-26hP for pgsql-hackers@lists.postgresql.org; Mon, 08 Jun 2026 10:29:35 +0000 Received: by mail-ua1-x931.google.com with SMTP id a1e0cc1a2514c-96387efc30aso2951393241.3 for ; Mon, 08 Jun 2026 03:29:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780914573; cv=none; d=google.com; s=arc-20240605; b=g1/9abWB3YQKg63dxhwgCZnNPKDZ/aODCXpKtgGPxqptX61eiLkhYBcMYm44bofZFl a1dg/6wbOFUHRfEkEzJDI89CNTMGWdcleBtgjxIAZNC+Z6USZafP/PmY6xtgDT+FgNUS CljSEI1xT++t6mfQKy5fga69TCBG7DIrh2DjSVOkAuR1T7wH21XcZaIolb7Ru02O0sX+ EOcbBTorvKphmiebbL9Yfi4zKI8PBSw726vZ8jk3C+4HcCrcoaSJeCrVj0t/0mQwF0xa RHRfDT8/M+zwri25MX+vvQ7wuB54QFgE0eJUvV9ekRNLbOlF6hAmK6o/A/5G+082fcgR Pa+w== 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=7bYW1T+AvSnSLbvnqb5tuWTpJBwtTO9rHmBrkbDCXIY=; fh=8c3Lld1ZXdExwr+u8t2UGLKYCODm3FI5E2S8QMRWv8E=; b=OfE40Ers7FnlVLGoC9NsZlJWdhj8tXB/69Xr1BVKJ3GxAq1IYlRdYTGKdSWcmhOnly DU3PHOtiMIrIheCnI1g9ihX6FDewUQ2RhhB1Ak/Of5TEMggOomnJMkj/xFM9TO3/IePi zCI3H3pcvIvRVMsokC3rawBseonmGFcqBOjrNEr3XAsdkCl4l4H6ih21lVI09Fw5XycO Vli32Qm94mf6L/qDvwjSA8MixvLdp0XBFXX0+YIvPb/coCvFu0zJ1CQyT5KZtlTe5dtH Xnoo6v9wSZNlEQUTbFapb4X/DVeObQSHUHq+y3c3CslLB8xFS7P3cfkqeVqku8fse9hH 13Xw==; 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=1780914573; x=1781519373; 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=7bYW1T+AvSnSLbvnqb5tuWTpJBwtTO9rHmBrkbDCXIY=; b=PQ5xyKQ8gRyOuEIc15v6hzdgu3mAyoD229MD7oJNsupg8p6a6I1GToY859qD3zd4Hp /89P7MNg8W88fApI7cBO9RGF1b8asZx55iIvFLH7sxg3SDbnDBJYDfRy/8eeKNc63azr 3qKr9KNowqRJODsmA7hGTlhaeUbkSo69X0fz1kdwTbnHVDSjG+cgner1rcDLUN6ACYXY KAuL/2yiNGdqD8mNyIFJ844IpagJh3yMPajzotf+EKj5juaIt2QFTsBC8FfxonCPyZut eX58QexevjdKL3edJeDo2OyqENWf9jJ8CJ8L5zkbj1GnhwThP7Bi8Ky/oXwNW9S5koM+ dICA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780914573; x=1781519373; 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=7bYW1T+AvSnSLbvnqb5tuWTpJBwtTO9rHmBrkbDCXIY=; b=A97jQ1MApQWV3gvnSVrIFRtqRDrJyz6ljaR+LU1+N0aHFP+No6XpSfMzw5aCcu+pbp HF916WxSOE8PdGlTR/7Z8A8+BFdaB2iS0gJ25Napq6ut0ab+Rp7TXhPzBR4HtTyewn1R 6+73YUqmYvMn+6UWK+8bsKNv8xlGng1cvgKRvcaOrGmggb9Y3BOmLE6x0im4aWtfdLY7 fHhgxhJ7Ty4kMpunW326YKRLxVttfNNTFMUw2WN+79gE3lorY+5FiX96jJI9i3LVeJPh Y9oxKV1ly42suoOis9OOjeXYl4McpfIi6IShIe8tAAitkuWy0IEV/pP0bEdgizfABPby aAnA== X-Forwarded-Encrypted: i=1; AFNElJ/OcBAL5FB8zSS5470ikTEAhsCDAfxudyuS6QG+n4xa2ljjyAOUq0KHIupuhc36YyKJqJ4sXQ0EqwfPkAeS@lists.postgresql.org X-Gm-Message-State: AOJu0YzvrjpZtolUGV2d8oizhvC62wNv864dJUxTqO4Om/+MXiOl+XR0 iilViU+cCUNGQKpzh/m4eZZ86jiDvdUPvC3KwxridSe8pj5/Ndus/3Kju8K1RDH2OuEWurxVwis 1I34z8iX25ISK+f91FMzUglhak0KQ9dhAY/QadnqTNg== X-Gm-Gg: Acq92OEfQxui5MQ/5DuM96REGVFGsNqTYNTCCQS4Y9Fv9rVrdJ9V00u5/HBvnGos6yQ aYmeVDIOfiwEYB8zVsfsTRAIcrl3xcFgBLoqGFOCw3j4XbUVARq4XtybMHgva0W478MPX0qUwmL kBNnefQSyhzGhKgUGZ0/tTyRICBizMA7ISs63J/t0MFC1rw7+KuvgDeIPpo+surE5VIYtSM2SuS rrJveQe+HTFkG7uT0QAEmrfL2FQWJByd8O83UdoUB/YU4i7GVmadE9bIqH9h7wxPR2KfeMHIZ4N 2O99VZvbhzqKxH9w6/d1vR8mq/tu5IRoKhuy//0CER6VPOzughCEg5YBiuRqak5+Pnd5caYWxw4 CFDO+TNMLpktxohsCiAh3+b51GqwH2/UzA7250SSueF3xKDEjtk/QYCEY0JeZC2zxTscoWQ1t5T Xj16g= X-Received: by 2002:a05:6102:6447:b0:6c8:eb6e:a078 with SMTP id ada2fe7eead31-6feea045839mr6469460137.0.1780914573257; Mon, 08 Jun 2026 03:29:33 -0700 (PDT) MIME-Version: 1.0 References: <33E9C4C2-B6A8-4FCC-BEEA-461EA5FB98C8@gmail.com> <7F0EA98A-6DBC-436A-8FF4-4A511A05ABE6@gmail.com> <7B7172F4-DB02-4259-997B-6AEF5ADF7FCE@gmail.com> <14E223D8-8425-446A-A36C-6B62BC334656@gmail.com> <9A3D388C-1DF4-4C43-9AB6-83529A8F48C8@gmail.com> <92CAD935-5ECE-46D8-B7D7-D8E3C991CC10@gmail.com> <684DCC2F-5982-4A5D-93F9-BD640B58B4BB@gmail.com> In-Reply-To: From: jian he Date: Mon, 8 Jun 2026 18:28:55 +0800 X-Gm-Features: AVVi8Cc1uf2kjISPo0-n8dN9AHvyqTGZqJPJCmm5uaQdhtzVneTW_32JYQSw0c8 Message-ID: Subject: Re: Fix bug of CHECK constraint enforceability recursion To: Chao Li Cc: Zsolt Parragi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000083d2480653bb7c7a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000083d2480653bb7c7a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 6, 2026 at 11:06=E2=80=AFAM Chao Li wr= ote: > > PFA v8: 0001 and 0003 unchanged. 0002 addressed Zsolt=E2=80=99s comment. > drop table root_t cascade; create table root_t (a int constraint c check (a > 0) enforced); create table p2 (a int constraint c check (a > 0) enforced); create table d () inherits (root_t, p2); create table e () inherits (d); CREATE OR REPLACE PROCEDURE create_table(i int) AS $$ DECLARE r int; query text; BEGIN FOR i IN 20..$1 LOOP query :=3D 'create table f' || i || '() inherits (e)'; raise notice 'query: %', query; EXECUTE query; END LOOP; END; $$ LANGUAGE plpgsql; call create_table(1000); alter table root_t alter constraint c not enforced; ATCheckCheckConstrHasEnforcedParent invoked 996070 times ATCheckCheckConstrHasEnforcedParent will call itself, so I think we need check_stack_depth() on it. I also made a minor refactoring to reduce unnecessary work in ATCheckCheckConstrHasEnforcedParent(). A single call to table_open(parentoid, ...) is enough. Keep errmsg() messages on a single line to improve grepability. -- jian https://www.enterprisedb.com/ --00000000000083d2480653bb7c7a Content-Type: application/octet-stream; name="v8-0001-Minor-refactoring-for-v8.nocfbot" Content-Disposition: attachment; filename="v8-0001-Minor-refactoring-for-v8.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq52hpb80 RnJvbSA3YzliOWQyNjIxOTFhMjY2NzAyMzA1OTJjY2ViOGM2YzE3ZGQ1Nzc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgOCBKdW4gMjAyNiAxODoyMjo1NSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjgg MS8xXSBNaW5vciByZWZhY3RvcmluZyBmb3Igdjg6CgoqIEF2b2lkIHNvbWUgdW5uZWNlc3Nhcnkg d29yayBpbiBBVENoZWNrQ2hlY2tDb25zdHJIYXNFbmZvcmNlZFBhcmVudCgpLgoqIEFkZCBjaGVj a19zdGFja19kZXB0aCgpIHRvIEFUQ2hlY2tDaGVja0NvbnN0ckhhc0VuZm9yY2VkUGFyZW50KCks IHNpbmNlIGl0J3MgcmVjdXJzaXZlLgoqIEtlZXAgZXJybXNnKCkgbWVzc2FnZXMgb24gYSBzaW5n bGUgbGluZSB0byBpbXByb3ZlIGdyZXBhYmlsaXR5LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jIHwgMTUgKysrKysrKy0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNyBpbnNl cnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg MzVhZmZmMzlkYTkuLmRhMjhlMGY4Y2I0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAt MTI3MjcsOCArMTI3MjcsNyBAQCBBVEV4ZWNBbHRlckNoZWNrQ29uc3RyRW5mb3JjZWFiaWxpdHko TGlzdCAqKndxdWV1ZSwgQVRBbHRlckNvbnN0cmFpbnQgKmNtZGNvbiwKIAkJaWYgKCFyZWN1cnNp bmcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpF Q1RfREVGSU5JVElPTiksCi0JCQkJCWVycm1zZygiY2Fubm90IG1hcmsgaW5oZXJpdGVkIGNvbnN0 cmFpbnQgXCIlc1wiIGFzIE5PVCBFTkZPUkNFRCBiZWNhdXNlICIKLQkJCQkJCSAgICJtYXRjaGlu ZyBjb25zdHJhaW50IG9uIHBhcmVudCB0YWJsZSBcIiVzXCIgaXMgRU5GT1JDRUQiLAorCQkJCQll cnJtc2coImNhbm5vdCBtYXJrIGluaGVyaXRlZCBjb25zdHJhaW50IFwiJXNcIiBhcyBOT1QgRU5G T1JDRUQgYmVjYXVzZSBtYXRjaGluZyBjb25zdHJhaW50IG9uIHBhcmVudCB0YWJsZSBcIiVzXCIg aXMgRU5GT1JDRUQiLAogCQkJCQkJICAgTmFtZVN0cihjdXJyY29uLT5jb25uYW1lKSwKIAkJCQkJ CSAgIGdldF9yZWxfbmFtZShlbmZvcmNlZF9wYXJlbnRvaWQpKSk7CiAKQEAgLTEyOTI5LDYgKzEy OTI4LDggQEAgQVRDaGVja0NoZWNrQ29uc3RySGFzRW5mb3JjZWRQYXJlbnQoUmVsYXRpb24gY29u cmVsLCBSZWxhdGlvbiByZWwsCiAJY3VycmNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVChjb250dXBsZSk7CiAJQXNzZXJ0KGN1cnJjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9D SEVDSyk7CiAKKwljaGVja19zdGFja19kZXB0aCgpOworCiAJaWYgKGN1cnJjb24tPmNvbmluaGNv dW50IDw9IDApCiAJCXJldHVybiBmYWxzZTsKIApAQCAtMTI5NDcsOCArMTI5NDgsMTAgQEAgQVRD aGVja0NoZWNrQ29uc3RySGFzRW5mb3JjZWRQYXJlbnQoUmVsYXRpb24gY29ucmVsLCBSZWxhdGlv biByZWwsCiAJCVN5c1NjYW5EZXNjIHBzY2FuOwogCQlTY2FuS2V5RGF0YSBwa2V5WzNdOwogCQlI ZWFwVHVwbGUJcGFyZW50dHVwOworCQlSZWxhdGlvbglwYXJlbnRyZWw7CiAKIAkJcGFyZW50b2lk ID0gKChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QoaW5oZXJpdHNUdXBsZSkpLT5pbmhwYXJl bnQ7CisJCXBhcmVudHJlbCA9IHRhYmxlX29wZW4ocGFyZW50b2lkLCBBY2Nlc3NTaGFyZUxvY2sp OwogCiAJCVNjYW5LZXlJbml0KCZwa2V5WzBdLAogCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29u cmVsaWQsCkBAIC0xMjk5MSwzMSArMTI5OTQsMjcgQEAgQVRDaGVja0NoZWNrQ29uc3RySGFzRW5m b3JjZWRQYXJlbnQoUmVsYXRpb24gY29ucmVsLCBSZWxhdGlvbiByZWwsCiAJCQkJaWYgKCFyZWwt PnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24gJiYKIAkJCQkJbGlzdF9tZW1iZXJfb2lkKGNoYW5naW5n X2NvbmlkcywgcGFyZW50Y29uLT5vaWQpKQogCQkJCXsKLQkJCQkJUmVsYXRpb24JcGFyZW50cmVs OwogCQkJCQlPaWQJCQlwYXJlbnRfZW5mb3JjZWRfcGFyZW50b2lkID0gSW52YWxpZE9pZDsKIAot CQkJCQlwYXJlbnRyZWwgPSB0YWJsZV9vcGVuKHBhcmVudG9pZCwgTm9Mb2NrKTsKLQogCQkJCQlp ZiAoIUFUQ2hlY2tDaGVja0NvbnN0ckhhc0VuZm9yY2VkUGFyZW50KGNvbnJlbCwKIAkJCQkJCQkJ CQkJCQkJCSBwYXJlbnRyZWwsCiAJCQkJCQkJCQkJCQkJCQkgcGFyZW50dHVwLAogCQkJCQkJCQkJ CQkJCQkJIGNoYW5naW5nX2NvbmlkcywKIAkJCQkJCQkJCQkJCQkJCSAmcGFyZW50X2VuZm9yY2Vk X3BhcmVudG9pZCkpCiAJCQkJCXsKLQkJCQkJCXRhYmxlX2Nsb3NlKHBhcmVudHJlbCwgTm9Mb2Nr KTsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9Ci0KLQkJCQkJdGFibGVfY2xvc2UocGFyZW50cmVs LCBOb0xvY2spOwogCQkJCX0KIAogCQkJCSplbmZvcmNlZF9wYXJlbnRvaWQgPSBwYXJlbnRvaWQ7 CiAJCQkJc3lzdGFibGVfZW5kc2Nhbihwc2Nhbik7CiAJCQkJc3lzdGFibGVfZW5kc2NhbihzY2Fu KTsKIAkJCQl0YWJsZV9jbG9zZShpbmhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdGFibGVf Y2xvc2UocGFyZW50cmVsLCBBY2Nlc3NTaGFyZUxvY2spOwogCQkJCXJldHVybiB0cnVlOwogCQkJ fQogCQl9CisJCXRhYmxlX2Nsb3NlKHBhcmVudHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKIAogCQlz eXN0YWJsZV9lbmRzY2FuKHBzY2FuKTsKIAl9Ci0tIAoyLjM0LjEKCg== --00000000000083d2480653bb7c7a--