]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add relallfrozen to pg_dump statistics.
authorJeff Davis <jdavis@postgresql.org>
Mon, 31 Mar 2025 05:14:06 +0000 (22:14 -0700)
committerJeff Davis <jdavis@postgresql.org>
Mon, 31 Mar 2025 05:14:06 +0000 (22:14 -0700)
Author: Corey Huinker <corey.huinker@gmail.com>
Discussion: https://postgr.es/m/CADkLM=desCuf3dVHasADvdUVRmb-5gO0mhMO5u9nzgv6i7U86Q@mail.gmail.com

src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump.h
src/bin/pg_dump/t/002_pg_dump.pl
src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm

index 84a78625820cad1e5a29dba90e9175fd3d636275..4ca34be230cd73b94d82550ba97a187bf1a3b627 100644 (file)
@@ -6874,7 +6874,8 @@ getFuncs(Archive *fout)
  */
 static RelStatsInfo *
 getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
-                                         char *reltuples, int32 relallvisible, char relkind,
+                                         char *reltuples, int32 relallvisible,
+                                         int32 relallfrozen, char relkind,
                                          char **indAttNames, int nindAttNames)
 {
        if (!fout->dopt->dumpStatistics)
@@ -6903,6 +6904,7 @@ getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
                info->relpages = relpages;
                info->reltuples = pstrdup(reltuples);
                info->relallvisible = relallvisible;
+               info->relallfrozen = relallfrozen;
                info->relkind = relkind;
                info->indAttNames = indAttNames;
                info->nindAttNames = nindAttNames;
@@ -6967,6 +6969,7 @@ getTables(Archive *fout, int *numTables)
        int                     i_relpages;
        int                     i_reltuples;
        int                     i_relallvisible;
+       int                     i_relallfrozen;
        int                     i_toastpages;
        int                     i_owning_tab;
        int                     i_owning_col;
@@ -7017,8 +7020,15 @@ getTables(Archive *fout, int *numTables)
                                                 "c.relowner, "
                                                 "c.relchecks, "
                                                 "c.relhasindex, c.relhasrules, c.relpages, "
-                                                "c.reltuples, c.relallvisible, c.relhastriggers, "
-                                                "c.relpersistence, "
+                                                "c.reltuples, c.relallvisible, ");
+
+       if (fout->remoteVersion >= 180000)
+               appendPQExpBufferStr(query, "c.relallfrozen, ");
+       else
+               appendPQExpBufferStr(query, "0 AS relallfrozen, ");
+
+       appendPQExpBufferStr(query,
+                                                "c.relhastriggers, c.relpersistence, "
                                                 "c.reloftype, "
                                                 "c.relacl, "
                                                 "acldefault(CASE WHEN c.relkind = " CppAsString2(RELKIND_SEQUENCE)
@@ -7183,6 +7193,7 @@ getTables(Archive *fout, int *numTables)
        i_relpages = PQfnumber(res, "relpages");
        i_reltuples = PQfnumber(res, "reltuples");
        i_relallvisible = PQfnumber(res, "relallvisible");
+       i_relallfrozen = PQfnumber(res, "relallfrozen");
        i_toastpages = PQfnumber(res, "toastpages");
        i_owning_tab = PQfnumber(res, "owning_tab");
        i_owning_col = PQfnumber(res, "owning_col");
@@ -7230,6 +7241,7 @@ getTables(Archive *fout, int *numTables)
        for (i = 0; i < ntups; i++)
        {
                int32           relallvisible = atoi(PQgetvalue(res, i, i_relallvisible));
+               int32           relallfrozen = atoi(PQgetvalue(res, i, i_relallfrozen));
 
                tblinfo[i].dobj.objType = DO_TABLE;
                tblinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_reltableoid));
@@ -7336,7 +7348,7 @@ getTables(Archive *fout, int *numTables)
                        stats = getRelationStatistics(fout, &tblinfo[i].dobj,
                                                                                  tblinfo[i].relpages,
                                                                                  PQgetvalue(res, i, i_reltuples),
-                                                                                 relallvisible,
+                                                                                 relallvisible, relallfrozen,
                                                                                  tblinfo[i].relkind, NULL, 0);
                        if (tblinfo[i].relkind == RELKIND_MATVIEW)
                                tblinfo[i].stats = stats;
@@ -7609,6 +7621,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                                i_relpages,
                                i_reltuples,
                                i_relallvisible,
+                               i_relallfrozen,
                                i_parentidx,
                                i_indexdef,
                                i_indnkeyatts,
@@ -7663,7 +7676,14 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
        appendPQExpBufferStr(query,
                                                 "SELECT t.tableoid, t.oid, i.indrelid, "
                                                 "t.relname AS indexname, "
-                                                "t.relpages, t.reltuples, t.relallvisible, "
+                                                "t.relpages, t.reltuples, t.relallvisible, ");
+
+       if (fout->remoteVersion >= 180000)
+               appendPQExpBufferStr(query, "t.relallfrozen, ");
+       else
+               appendPQExpBufferStr(query, "0 AS relallfrozen, ");
+
+       appendPQExpBufferStr(query,
                                                 "pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
                                                 "i.indkey, i.indisclustered, "
                                                 "c.contype, c.conname, "
@@ -7779,6 +7799,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
        i_relpages = PQfnumber(res, "relpages");
        i_reltuples = PQfnumber(res, "reltuples");
        i_relallvisible = PQfnumber(res, "relallvisible");
+       i_relallfrozen = PQfnumber(res, "relallfrozen");
        i_parentidx = PQfnumber(res, "parentidx");
        i_indexdef = PQfnumber(res, "indexdef");
        i_indnkeyatts = PQfnumber(res, "indnkeyatts");
@@ -7850,6 +7871,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                        RelStatsInfo *relstats;
                        int32           relpages = atoi(PQgetvalue(res, j, i_relpages));
                        int32           relallvisible = atoi(PQgetvalue(res, j, i_relallvisible));
+                       int32           relallfrozen = atoi(PQgetvalue(res, j, i_relallfrozen));
 
                        indxinfo[j].dobj.objType = DO_INDEX;
                        indxinfo[j].dobj.catId.tableoid = atooid(PQgetvalue(res, j, i_tableoid));
@@ -7892,7 +7914,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
 
                        relstats = getRelationStatistics(fout, &indxinfo[j].dobj, relpages,
                                                                                         PQgetvalue(res, j, i_reltuples),
-                                                                                        relallvisible, indexkind,
+                                                                                        relallvisible, relallfrozen, indexkind,
                                                                                         indAttNames, nindAttNames);
 
                        contype = *(PQgetvalue(res, j, i_contype));
@@ -10618,9 +10640,15 @@ dumpRelationStats(Archive *fout, const RelStatsInfo *rsinfo)
        appendPQExpBufferStr(out, ",\n");
        appendPQExpBuffer(out, "\t'relpages', '%d'::integer,\n", rsinfo->relpages);
        appendPQExpBuffer(out, "\t'reltuples', '%s'::real,\n", rsinfo->reltuples);
-       appendPQExpBuffer(out, "\t'relallvisible', '%d'::integer\n);\n",
+       appendPQExpBuffer(out, "\t'relallvisible', '%d'::integer",
                                          rsinfo->relallvisible);
 
+       if (fout->remoteVersion >= 180000)
+               appendPQExpBuffer(out, ",\n\t'relallfrozen', '%d'::integer", rsinfo->relallfrozen);
+
+       appendPQExpBufferStr(out, "\n);\n");
+
+
        /* fetch attribute stats */
        appendPQExpBufferStr(query, "EXECUTE getAttributeStats(");
        appendStringLiteralAH(query, dobj->namespace->dobj.name, fout);
index 70f7a369e4a6bd9b36c0edf23d0966ac8c2cbfec..e6f0f86a4593a2fb02dcc3e1e988000e43e0b802 100644 (file)
@@ -442,6 +442,7 @@ typedef struct _relStatsInfo
        int32           relpages;
        char       *reltuples;
        int32           relallvisible;
+       int32           relallfrozen;
        char            relkind;                /* 'r', 'm', 'i', etc */
 
        /*
index 51ebf8ad13c10c5290405ca2252108a741e86052..576326daec73364f35a6e40290d6e3217f700b0e 100644 (file)
@@ -4771,7 +4771,8 @@ my %tests = (
                        'relname',\s'dup_test_post_data_ix',\s+
                        'relpages',\s'\d+'::integer,\s+
                        'reltuples',\s'\d+'::real,\s+
-                       'relallvisible',\s'\d+'::integer\s+
+                       'relallvisible',\s'\d+'::integer,\s+
+                       'relallfrozen',\s'\d+'::integer\s+
                        \);\s+
                        \QSELECT * FROM pg_catalog.pg_restore_attribute_stats(\E\s+
                        'version',\s'\d+'::integer,\s+
index 81a8f44aa9f07ff94d5aaac80a4c4cc79e01a21b..c451aea3ac9116673e24ad7dae7dd9e196c99274 100644 (file)
@@ -648,6 +648,11 @@ sub adjust_new_dumpfile
        $dump =~ s {\n(\s+'version',) '\d+'::integer,$}
                {$1 '000000'::integer,}mg;
 
+       if ($old_version < 18)
+       {
+               $dump =~ s {,\n(\s+'relallfrozen',) '-?\d+'::integer$}{}mg;
+       }
+
        # pre-v16 dumps do not know about XMLSERIALIZE(NO INDENT).
        if ($old_version < 16)
        {