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 1wUWAN-001DcV-2k for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jun 2026 20:56:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wUWAK-00FuRy-37 for pgsql-hackers@arkaria.postgresql.org; Tue, 02 Jun 2026 20:56:48 +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 1wUWAK-00FuRq-22 for pgsql-hackers@lists.postgresql.org; Tue, 02 Jun 2026 20:56:48 +0000 Received: from mail-yx1-xb12a.google.com ([2607:f8b0:4864:20::b12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wUWAH-00000000vg2-0pnN for pgsql-hackers@lists.postgresql.org; Tue, 02 Jun 2026 20:56:48 +0000 Received: by mail-yx1-xb12a.google.com with SMTP id 956f58d0204a3-660456349d9so5247831d50.3 for ; Tue, 02 Jun 2026 13:56:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780433802; cv=none; d=google.com; s=arc-20240605; b=DsuaKCp6YX1pdnu8NCUfHTvz/ju4Z8MK1jCm2wbLQiFAauFMIgkIQiAWvnYYGuRTls b/TfFxEk8+hNIRyHUpZNNnchtbhQ40wlN+t2BEqQwzr1GsPzvlr84Tp+FkIVTiOT0LWs YMxnS04MzwK/+YOeDOz0GWlO+nX9Zzcy5tHU57VwtHam2FUAgXUdOY9TYZsiH9K4t/mk hBvo7jx81fspOSOUwCNio378CexSCMsy28E+li7i2REqtkqfpNF9cXcQ91Zrgxbfa2gz FkyHTxTVITCeOGFYN2Asq6YPtmgostXGtMwJUMt7mjZpOYiDmgAzA0xvDT2qAICAwmUt uBxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :dkim-signature; bh=PTGIIye8VaDIU/04XZfhvOQI0Cc72ksxzoMAbMDePwU=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=B5hfU9n4VxsItKnI/QVF2A1iuuK9DGicxter4PwYidLBhNKDKqxW7jsJhy22v3Fa37 E+PYlm7wHBGOS7oNjAg5a0sgB2tnm8zWlUanyqXI/4tUgPjzgFkHUWtCRBZVRnyXm2uu rHLlybobyoFycd9qfXW1AYt+ZlfDJ7YnfBbePv1+Fac07eJSTJbWmvLWFbC8BpCWQBPY 8KGixMONcU1M/+Qe7b5LS8XKcP+ZZ5Ilu5zqzcWVxjL92y+QL9WUV04xJFGLDrDnOEem i0UsoRoHOrzcTGZaOIZFV3+BjbLzq3XUG7zUP8XkDPz7zWW7H9zcoEirqflPk+TsHX8h 8xXw==; 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=percona.com; s=google; t=1780433802; x=1781038602; darn=lists.postgresql.org; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :from:to:cc:subject:date:message-id:reply-to; bh=PTGIIye8VaDIU/04XZfhvOQI0Cc72ksxzoMAbMDePwU=; b=LDyuiNADYRqMRK+GHrf3olZNCMhEDSHS78M4ICWLb+fkOsfveLpbZXHNpIZ4j7n6ys //0npXoeiqgHMtWNRuYs14UfXXNDZsFHTPtHAawlEVcv6Dj7qtHaWURYusmoKCncoSZI 5L4jSGNWkXP6IWErRebI9JfD8oH6qR5NKEdbg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780433802; x=1781038602; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PTGIIye8VaDIU/04XZfhvOQI0Cc72ksxzoMAbMDePwU=; b=ZCTnzGp3ajAh/x2miQzxuGzoOW7ponacP8YfcVPSkPwBbrOMFpwmoNC8lHn62pVxG6 o0Q4UEBoBRLUqG67dqVesvr7R1S+SiFx9Jiwhr9PmrK5jpNrsFWQ0AAyVunXSK6yLmyl rlGkaWFgSJPtDYO6pnRFk4POREieuwQC/DaW8wVr1WmIXv91VP9ENT3ZjQ3BvLiCXMqs awex4r3WMOYaPpNau4BMhIoNXhvnUrMVWm402/YcYqNw+fdYgeBKpcOTI78gKx/NnwLQ 7YQV0vqcCaiei3ndbtvhnse5CecDW874jmEKIY7C5QnHwGuO1Pz7z6j89ty8S16FmLFu SQsA== X-Gm-Message-State: AOJu0YwepS6N5RvHOHfYo2EU1mHrHvZqFnHBkhLwv6FpjFUU2QP3e/YM 3+n88m0Zf5C6IUWs9Akg8UTrnVE94zwhlOx2IAkghw5ovgZrhpBSpeOZEg7XbrKJe5ufbODldpZ T7JI/5pNNJvNQ3nHaNW5RnQvQ/7t7348c7CtMO8B+vBVpIwTPr2yE06toq5g9soh2OUrKucqWWk VsPHx8q1WL5X81bNBCQcIGoNL/UtBwWXkaJjI4mqrcpcP+j1GEWEpWQZaVEx3oq8eIJuV12PpYu F60GEUS3LqTjxVyBZVDke8d2TM8nfKTdoAQfTeNOfZiOHix3ipSZsgHVKZCUs6ZsgtYmsdwWILP 8Q== X-Gm-Gg: Acq92OGoVRvvA3iwt7ZoA3zLvISIVVdPccFKuJMQbtULK8Rp3OfSg1H0ph/50NSKOdl 5jwX9tclS9hl+F8m+kP2NQpqVxejHig4T976f/ZYkbc5NEluJ7qgn94E/z7qjdSn9DXD4pSMH4v /Ylhj2adhm1UowE/UG5j7SfQhERdxZpvlGy7P0RaIgSt+6OzdRPYLGkCxQuVVDPDBbmqc0jwGPZ 3zlsrm2flwSxehgZYt0Fho7CHc1nHmu8W5gadT8NT2qFhdNggsgm1q+yu8fj7KFUizT4uNkiUz9 /1SJ2TcHqOZE+f59QHne5uDrwx8toggzsElkfvEHXBGr61ouqZ/p2TV+164JRK1XKSJgRFhaDot 0rHY= X-Received: by 2002:a05:690e:b45:b0:65e:39d1:d9f4 with SMTP id 956f58d0204a3-660dbe4f75amr470402d50.9.1780433801919; Tue, 02 Jun 2026 13:56:41 -0700 (PDT) Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Tue, 2 Jun 2026 15:56:40 -0500 Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Tue, 2 Jun 2026 15:56:40 -0500 From: Zsolt Parragi In-Reply-To: References: <33E9C4C2-B6A8-4FCC-BEEA-461EA5FB98C8@gmail.com> <7F0EA98A-6DBC-436A-8FF4-4A511A05ABE6@gmail.com> <7B7172F4-DB02-4259-997B-6AEF5ADF7FCE@gmail.com> MIME-Version: 1.0 Date: Tue, 2 Jun 2026 15:56:40 -0500 X-Gm-Features: AVHnY4LZ5LjBNlLLyXd3AXZXZOgfUFf7T7N1hFo7kf3QfTIFwmaYQFqMmc5yvoE Message-ID: Subject: Re: Fix bug of CHECK constraint enforceability recursion To: pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello + * During recursion, another parent outside this ALTER may still enforce + * the same constraint. In that case, keep the child constraint ENFORCED + * so that its merged enforceability still reflects the remaining enforced + * parent. + */ + if (!cmdcon->is_enforced) + { This means once is_enforced is set to true, it will never be rechecked. See the following example which showcases an issue with this: create table g(a int constraint k check(a > 0) enforced); create table o(a int constraint k check(a > 0) enforced); create table s1() inherits(g); create table s2() inherits(g, o); create table s3() inherits(g); alter table g alter constraint k not enforced; select conrelid::regclass as tbl, conenforced from pg_constraint where conname = 'k' and contype = 'c' order by conrelid::regclass::text collate "C"; insert into s1 values (-1); insert into s3 values (-1); -- bug: ERRORs out, but shouldn't