On Wed, 2025-06-18 at 11:25 -0700, Paul Jungwirth wrote: > Hi Hackers, > > In pg17 we added support for cross-partition EXCLUDE constraints, as > long as they included all > partition key columns and compared them with equality (see > 8c852ba9a4). I updated the docs for > exclusion constraints, but I missed that the docs for CREATE TABLE > still said that they were not > supported. This commit fixes that. I don't see a similar message in > the ALTER TABLE docs.
Leaving it in the entry for PARTITION BY seems out of place; shouldn't it be moved to the entry for EXCLUDE? I also merged your wording with some similar wording from the entry about UNIQUE. Attached. Regards, Jeff Davis
From 0988ec1bac79055899fb555ac0c0441333888c83 Mon Sep 17 00:00:00 2001 From: "Paul A. Jungwirth" <p...@illuminatedcomputing.com> Date: Tue, 17 Jun 2025 20:48:56 -0700 Subject: [PATCH] Correct docs about partitions and EXCLUDE constraints. In version 17 we added support for cross-partition EXCLUDE constraints, as long as they included all partition key columns and compared them with equality (see 8c852ba9a4). I updated the docs for exclusion constraints, but I missed that the docs for CREATE TABLE still said that they were not supported. This commit fixes that. Author: Paul A. Jungwirth <p...@illuminatedcomputing.com> Co-authored-by: Jeff Davis <pg...@j-davis.com> Discussion: https://postgr.es/m/c955d292-b92d-42d1-a2a0-1ec6715a2...@illuminatedcomputing.com Backpatch-through: 17 --- doc/src/sgml/ref/create_table.sgml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index 4a41b2f5530..a5816918182 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -447,11 +447,6 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM the values in the new row, an error will be reported. </para> - <para> - Partitioned tables do not support <literal>EXCLUDE</literal> constraints; - however, you can define these constraints on individual partitions. - </para> - <para> See <xref linkend="ddl-partitioning"/> for more discussion on table partitioning. @@ -1162,6 +1157,18 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM exclusion constraint on a subset of the table; internally this creates a partial index. Note that parentheses are required around the predicate. </para> + + <para> + When establishing an exclusion constraint for a multi-level partition + hierarchy, all the columns in the partition key of the target + partitioned table, as well as those of all its descendant partitioned + tables, must be included in the constraint definition. Additionally, + those columns must be compared using the equality operator. These + restrictions ensure that potentially-conflicting rows will exist in the + same partition. The constraint may also refer to other columns which + are not a part of any partition key, which can be compared using any + appropriate operator. + </para> </listitem> </varlistentry> -- 2.43.0