Skip to content

Commit 4694aed

Browse files
committed
Add relallfrozen to pg_dump statistics.
Author: Corey Huinker <corey.huinker@gmail.com> Discussion: https://postgr.es/m/CADkLM=desCuf3dVHasADvdUVRmb-5gO0mhMO5u9nzgv6i7U86Q@mail.gmail.com
1 parent 2a5e709 commit 4694aed

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed

src/bin/pg_dump/pg_dump.c

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6874,7 +6874,8 @@ getFuncs(Archive *fout)
68746874
*/
68756875
static RelStatsInfo *
68766876
getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
6877-
char *reltuples, int32 relallvisible, char relkind,
6877+
char *reltuples, int32 relallvisible,
6878+
int32 relallfrozen, char relkind,
68786879
char **indAttNames, int nindAttNames)
68796880
{
68806881
if (!fout->dopt->dumpStatistics)
@@ -6903,6 +6904,7 @@ getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
69036904
info->relpages = relpages;
69046905
info->reltuples = pstrdup(reltuples);
69056906
info->relallvisible = relallvisible;
6907+
info->relallfrozen = relallfrozen;
69066908
info->relkind = relkind;
69076909
info->indAttNames = indAttNames;
69086910
info->nindAttNames = nindAttNames;
@@ -6967,6 +6969,7 @@ getTables(Archive *fout, int *numTables)
69676969
int i_relpages;
69686970
int i_reltuples;
69696971
int i_relallvisible;
6972+
int i_relallfrozen;
69706973
int i_toastpages;
69716974
int i_owning_tab;
69726975
int i_owning_col;
@@ -7017,8 +7020,15 @@ getTables(Archive *fout, int *numTables)
70177020
"c.relowner, "
70187021
"c.relchecks, "
70197022
"c.relhasindex, c.relhasrules, c.relpages, "
7020-
"c.reltuples, c.relallvisible, c.relhastriggers, "
7021-
"c.relpersistence, "
7023+
"c.reltuples, c.relallvisible, ");
7024+
7025+
if (fout->remoteVersion >= 180000)
7026+
appendPQExpBufferStr(query, "c.relallfrozen, ");
7027+
else
7028+
appendPQExpBufferStr(query, "0 AS relallfrozen, ");
7029+
7030+
appendPQExpBufferStr(query,
7031+
"c.relhastriggers, c.relpersistence, "
70227032
"c.reloftype, "
70237033
"c.relacl, "
70247034
"acldefault(CASE WHEN c.relkind = " CppAsString2(RELKIND_SEQUENCE)
@@ -7183,6 +7193,7 @@ getTables(Archive *fout, int *numTables)
71837193
i_relpages = PQfnumber(res, "relpages");
71847194
i_reltuples = PQfnumber(res, "reltuples");
71857195
i_relallvisible = PQfnumber(res, "relallvisible");
7196+
i_relallfrozen = PQfnumber(res, "relallfrozen");
71867197
i_toastpages = PQfnumber(res, "toastpages");
71877198
i_owning_tab = PQfnumber(res, "owning_tab");
71887199
i_owning_col = PQfnumber(res, "owning_col");
@@ -7230,6 +7241,7 @@ getTables(Archive *fout, int *numTables)
72307241
for (i = 0; i < ntups; i++)
72317242
{
72327243
int32 relallvisible = atoi(PQgetvalue(res, i, i_relallvisible));
7244+
int32 relallfrozen = atoi(PQgetvalue(res, i, i_relallfrozen));
72337245

72347246
tblinfo[i].dobj.objType = DO_TABLE;
72357247
tblinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_reltableoid));
@@ -7336,7 +7348,7 @@ getTables(Archive *fout, int *numTables)
73367348
stats = getRelationStatistics(fout, &tblinfo[i].dobj,
73377349
tblinfo[i].relpages,
73387350
PQgetvalue(res, i, i_reltuples),
7339-
relallvisible,
7351+
relallvisible, relallfrozen,
73407352
tblinfo[i].relkind, NULL, 0);
73417353
if (tblinfo[i].relkind == RELKIND_MATVIEW)
73427354
tblinfo[i].stats = stats;
@@ -7609,6 +7621,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
76097621
i_relpages,
76107622
i_reltuples,
76117623
i_relallvisible,
7624+
i_relallfrozen,
76127625
i_parentidx,
76137626
i_indexdef,
76147627
i_indnkeyatts,
@@ -7663,7 +7676,14 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
76637676
appendPQExpBufferStr(query,
76647677
"SELECT t.tableoid, t.oid, i.indrelid, "
76657678
"t.relname AS indexname, "
7666-
"t.relpages, t.reltuples, t.relallvisible, "
7679+
"t.relpages, t.reltuples, t.relallvisible, ");
7680+
7681+
if (fout->remoteVersion >= 180000)
7682+
appendPQExpBufferStr(query, "t.relallfrozen, ");
7683+
else
7684+
appendPQExpBufferStr(query, "0 AS relallfrozen, ");
7685+
7686+
appendPQExpBufferStr(query,
76677687
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
76687688
"i.indkey, i.indisclustered, "
76697689
"c.contype, c.conname, "
@@ -7779,6 +7799,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
77797799
i_relpages = PQfnumber(res, "relpages");
77807800
i_reltuples = PQfnumber(res, "reltuples");
77817801
i_relallvisible = PQfnumber(res, "relallvisible");
7802+
i_relallfrozen = PQfnumber(res, "relallfrozen");
77827803
i_parentidx = PQfnumber(res, "parentidx");
77837804
i_indexdef = PQfnumber(res, "indexdef");
77847805
i_indnkeyatts = PQfnumber(res, "indnkeyatts");
@@ -7850,6 +7871,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
78507871
RelStatsInfo *relstats;
78517872
int32 relpages = atoi(PQgetvalue(res, j, i_relpages));
78527873
int32 relallvisible = atoi(PQgetvalue(res, j, i_relallvisible));
7874+
int32 relallfrozen = atoi(PQgetvalue(res, j, i_relallfrozen));
78537875

78547876
indxinfo[j].dobj.objType = DO_INDEX;
78557877
indxinfo[j].dobj.catId.tableoid = atooid(PQgetvalue(res, j, i_tableoid));
@@ -7892,7 +7914,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
78927914

78937915
relstats = getRelationStatistics(fout, &indxinfo[j].dobj, relpages,
78947916
PQgetvalue(res, j, i_reltuples),
7895-
relallvisible, indexkind,
7917+
relallvisible, relallfrozen, indexkind,
78967918
indAttNames, nindAttNames);
78977919

78987920
contype = *(PQgetvalue(res, j, i_contype));
@@ -10618,9 +10640,15 @@ dumpRelationStats(Archive *fout, const RelStatsInfo *rsinfo)
1061810640
appendPQExpBufferStr(out, ",\n");
1061910641
appendPQExpBuffer(out, "\t'relpages', '%d'::integer,\n", rsinfo->relpages);
1062010642
appendPQExpBuffer(out, "\t'reltuples', '%s'::real,\n", rsinfo->reltuples);
10621-
appendPQExpBuffer(out, "\t'relallvisible', '%d'::integer\n);\n",
10643+
appendPQExpBuffer(out, "\t'relallvisible', '%d'::integer",
1062210644
rsinfo->relallvisible);
1062310645

10646+
if (fout->remoteVersion >= 180000)
10647+
appendPQExpBuffer(out, ",\n\t'relallfrozen', '%d'::integer", rsinfo->relallfrozen);
10648+
10649+
appendPQExpBufferStr(out, "\n);\n");
10650+
10651+
1062410652
/* fetch attribute stats */
1062510653
appendPQExpBufferStr(query, "EXECUTE getAttributeStats(");
1062610654
appendStringLiteralAH(query, dobj->namespace->dobj.name, fout);

src/bin/pg_dump/pg_dump.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ typedef struct _relStatsInfo
442442
int32 relpages;
443443
char *reltuples;
444444
int32 relallvisible;
445+
int32 relallfrozen;
445446
char relkind; /* 'r', 'm', 'i', etc */
446447

447448
/*

src/bin/pg_dump/t/002_pg_dump.pl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4771,7 +4771,8 @@
47714771
'relname',\s'dup_test_post_data_ix',\s+
47724772
'relpages',\s'\d+'::integer,\s+
47734773
'reltuples',\s'\d+'::real,\s+
4774-
'relallvisible',\s'\d+'::integer\s+
4774+
'relallvisible',\s'\d+'::integer,\s+
4775+
'relallfrozen',\s'\d+'::integer\s+
47754776
\);\s+
47764777
\QSELECT * FROM pg_catalog.pg_restore_attribute_stats(\E\s+
47774778
'version',\s'\d+'::integer,\s+

src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,11 @@ sub adjust_new_dumpfile
648648
$dump =~ s {\n(\s+'version',) '\d+'::integer,$}
649649
{$1 '000000'::integer,}mg;
650650

651+
if ($old_version < 18)
652+
{
653+
$dump =~ s {,\n(\s+'relallfrozen',) '-?\d+'::integer$}{}mg;
654+
}
655+
651656
# pre-v16 dumps do not know about XMLSERIALIZE(NO INDENT).
652657
if ($old_version < 16)
653658
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy