]> granicus.if.org Git - postgresql/commitdiff
Allow a foreign table CHECK constraint to be initially NOT VALID.
authorRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 17:09:15 +0000 (13:09 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 3 Aug 2017 17:24:48 +0000 (13:24 -0400)
For a table, the constraint can be considered validated immediately,
because the table must be empty.  But for a foreign table this is
not necessarily the case.

Fixes a bug in commit f27a6b15e6566fba7748d0d9a3fc5bcfd52c4a1b.

Amit Langote, with some changes by me.

Discussion: http://postgr.es/m/d2b7419f-4a71-cf86-cc99-bfd0f359a1ea@lab.ntt.co.jp

src/backend/parser/parse_utilcmd.c

index a86c2341f5079af6f6415d30365d4109fdf145a5..87cb4188a3954b9263e3bee608f9d760ae07a437 100644 (file)
@@ -165,6 +165,7 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
        Oid                     existing_relid;
        ParseCallbackState pcbstate;
        bool            like_found = false;
+       bool            is_foreign_table = IsA(stmt, CreateForeignTableStmt);
 
        /*
         * We must not scribble on the passed-in CreateStmt, so copy it.  (This is
@@ -330,7 +331,7 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
        /*
         * Postprocess check constraints.
         */
-       transformCheckConstraints(&cxt, true);
+       transformCheckConstraints(&cxt, !is_foreign_table ? true : false);
 
        /*
         * Output results.
@@ -2129,9 +2130,9 @@ transformCheckConstraints(CreateStmtContext *cxt, bool skipValidation)
                return;
 
        /*
-        * If creating a new table, we can safely skip validation of check
-        * constraints, and nonetheless mark them valid.  (This will override any
-        * user-supplied NOT VALID flag.)
+        * If creating a new table (but not a foreign table), we can safely skip
+        * validation of check constraints, and nonetheless mark them valid.
+        * (This will override any user-supplied NOT VALID flag.)
         */
        if (skipValidation)
        {