Avoid retrieval of CHECK constraints and DEFAULT exprs in data-only dump
authorMichael Paquier <michael@paquier.xyz>
Wed, 16 Sep 2020 07:26:50 +0000 (16:26 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 16 Sep 2020 07:26:50 +0000 (16:26 +0900)
Those extra queries are not necessary when doing a data-only dump.  With
this change, this means that the dependencies between CHECK/DEFAULT and
the parent table are not tracked anymore for a data-only dump.  However,
these dependencies are only used for the schema generation and we have
never guaranteed that a dump can be reloaded if a CHECK constraint uses
a custom function whose behavior changes when loading the data, like
when using cross-table references in the CHECK function.

Author: Julien Rouhaud
Reviewed-by: Daniel Gustafsson, Michael Paquier
Discussion: https://postgr.es/m/20200712054850.GA92357@nol

src/bin/pg_dump/pg_dump.c

index 784bceaec39489c1c02733d78939870335921dc0..340638887217ef57a7583b949788701613c803da 100644 (file)
@@ -8644,9 +8644,10 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
        PQclear(res);
 
        /*
-        * Get info about column defaults
+        * Get info about column defaults.  This is skipped for a data-only
+        * dump, as it is only needed for table schemas.
         */
-       if (hasdefaults)
+       if (!dopt->dataOnly && hasdefaults)
        {
            AttrDefInfo *attrdefs;
            int         numDefaults;
@@ -8731,9 +8732,10 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
        }
 
        /*
-        * Get info about table CHECK constraints
+        * Get info about table CHECK constraints.  This is skipped for a
+        * data-only dump, as it is only needed for table schemas.
         */
-       if (tbinfo->ncheck > 0)
+       if (!dopt->dataOnly && tbinfo->ncheck > 0)
        {
            ConstraintInfo *constrs;
            int         numConstrs;