Skip to content

Commit 4694aed

Browse files
committed
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

+35-7
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

+1
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

+2-1
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

+5
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)