Clarify that cross-row constraints are unsupported
authorAlvaro Herrera
Mon, 26 Nov 2018 15:27:07 +0000 (12:27 -0300)
committerAlvaro Herrera
Mon, 26 Nov 2018 15:38:19 +0000 (12:38 -0300)
Maybe we'll implement them later, or maybe not, but let's make the statu
quo clear for now.

Author: Lætitia Avrot, Patrick Francelle
Reviewers: too many to list
Discussion: https://postgr.es/m/CAB_COdhUuzNFOJfc7SNNso5rOuVA3ui93KMVunEM8Yih+K5A6A@mail.gmail.com

doc/src/sgml/ddl.sgml
doc/src/sgml/ref/create_table.sgml

index 61c4a25460347b65b583ebec265288f16d7a816c..bfe89ef8ae04407d3a0c9838bc9b8e10eeb6ab76 100644 (file)
@@ -403,6 +403,33 @@ CREATE TABLE products (
     ensure that a column does not contain null values, the not-null
     constraint described in the next section can be used.
    
+
+   
+    
+     PostgreSQL does not support
+     CHECK constraints that reference table data other than
+     the new or updated row being checked.  While a CHECK
+     constraint that violates this rule may appear to work in simple
+     tests, it cannot guarantee that the database will not reach a state
+     in which the constraint condition is false (due to subsequent changes
+     of the other row(s) involved).  This would cause a database dump and
+     reload to fail.  The reload could fail even when the complete
+     database state is consistent with the constraint, due to rows not
+     being loaded in an order that will satisfy the constraint.  If
+     possible, use UNIQUEEXCLUDE,
+     or FOREIGN KEY constraints to express
+     cross-row and cross-table restrictions.
+    
+
+    
+     If what you desire is a one-time check against other rows at row
+     insertion, rather than a continuously-maintained consistency
+     guarantee, a custom trigger can be used
+     to implement that.  (This approach avoids the dump/reload problem because
+     pg_dump does not reinstall triggers until after
+     reloading data, so that the check will not be enforced during a dump/reload.)
+    
+   
   
 
   
index 50d55970020f6fd143d642b0444bc055d159e3cd..d3e33132f3758b6932d01472e0a2cb540c7ef9b1 100644 (file)
@@ -754,7 +754,8 @@ WITH ( MODULUS numeric_literal, REM
      
       Currently, CHECK expressions cannot contain
       subqueries nor refer to variables other than columns of the
-      current row.  The system column tableoid
+      current row (see ).
+      The system column tableoid
       may be referenced, but not any other system column.