]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix broken-FK-detection query in release notes
authorÁlvaro Herrera <alvherre@kurilemu.de>
Fri, 30 May 2025 14:18:18 +0000 (16:18 +0200)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Fri, 30 May 2025 14:18:18 +0000 (16:18 +0200)
Commits 53af9491a043 and 2d5fe514052a fixed a number of problems with
foreign keys that reference partitioned tables, and a query to detect
already broken FKs was supplied with the release notes for 17.1, 16.5,
15.9, 14.14, 13.17.  However, that query has a bug that causes it to
wrongly report self-referential foreign keys even when they are correct,
so if the user was to drop and rebuild the FKs as indicated, the query
would continue to report them as needing to be repaired.  Here we fix
the query to not have that problem.

Reported-by: Paul Foerster <paul.foerster@gmail.com>
Discussion: https://postgr.es/m/5456A1D0-CD47-4315-9C65-71B27E7A2906@gmail.com
Backpatch-through: 13-17

doc/src/sgml/release-16.sgml

index f90ead3d56e83daedcd49e6cb8f4ef0803b1a42c..3a2b60a9279a2b4bda7164fef5eeb2c4044ff1a2 100644 (file)
@@ -3091,10 +3091,14 @@ FROM pg_catalog.pg_constraint c
 WHERE contype = 'f' AND conparentid = 0 AND
    (SELECT count(*) FROM pg_catalog.pg_constraint c2
     WHERE c2.conparentid = c.oid) &lt;&gt;
-   (SELECT count(*) FROM pg_catalog.pg_inherits i
+   ((SELECT count(*) FROM pg_catalog.pg_inherits i
     WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND
       EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table
-              WHERE partrelid = i.inhparent));
+              WHERE partrelid = i.inhparent)) +
+    CASE WHEN pg_catalog.pg_partition_root(conrelid) = confrelid THEN
+              (SELECT count(*) FROM pg_catalog.pg_partition_tree(confrelid)
+                WHERE level = 1)
+         ELSE 0 END);
 </programlisting>
       Since it is possible that one or more of the <literal>ADD
       CONSTRAINT</literal> steps will fail, you should save the query's