mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Add relallfrozen to pg_dump statistics.
Author: Corey Huinker <corey.huinker@gmail.com> Discussion: https://postgr.es/m/CADkLM=desCuf3dVHasADvdUVRmb-5gO0mhMO5u9nzgv6i7U86Q@mail.gmail.com
This commit is contained in:
parent
2a5e709e72
commit
4694aedf63
@ -6874,7 +6874,8 @@ getFuncs(Archive *fout)
|
|||||||
*/
|
*/
|
||||||
static RelStatsInfo *
|
static RelStatsInfo *
|
||||||
getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
|
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)
|
char **indAttNames, int nindAttNames)
|
||||||
{
|
{
|
||||||
if (!fout->dopt->dumpStatistics)
|
if (!fout->dopt->dumpStatistics)
|
||||||
@ -6903,6 +6904,7 @@ getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
|
|||||||
info->relpages = relpages;
|
info->relpages = relpages;
|
||||||
info->reltuples = pstrdup(reltuples);
|
info->reltuples = pstrdup(reltuples);
|
||||||
info->relallvisible = relallvisible;
|
info->relallvisible = relallvisible;
|
||||||
|
info->relallfrozen = relallfrozen;
|
||||||
info->relkind = relkind;
|
info->relkind = relkind;
|
||||||
info->indAttNames = indAttNames;
|
info->indAttNames = indAttNames;
|
||||||
info->nindAttNames = nindAttNames;
|
info->nindAttNames = nindAttNames;
|
||||||
@ -6967,6 +6969,7 @@ getTables(Archive *fout, int *numTables)
|
|||||||
int i_relpages;
|
int i_relpages;
|
||||||
int i_reltuples;
|
int i_reltuples;
|
||||||
int i_relallvisible;
|
int i_relallvisible;
|
||||||
|
int i_relallfrozen;
|
||||||
int i_toastpages;
|
int i_toastpages;
|
||||||
int i_owning_tab;
|
int i_owning_tab;
|
||||||
int i_owning_col;
|
int i_owning_col;
|
||||||
@ -7017,8 +7020,15 @@ getTables(Archive *fout, int *numTables)
|
|||||||
"c.relowner, "
|
"c.relowner, "
|
||||||
"c.relchecks, "
|
"c.relchecks, "
|
||||||
"c.relhasindex, c.relhasrules, c.relpages, "
|
"c.relhasindex, c.relhasrules, c.relpages, "
|
||||||
"c.reltuples, c.relallvisible, c.relhastriggers, "
|
"c.reltuples, c.relallvisible, ");
|
||||||
"c.relpersistence, "
|
|
||||||
|
if (fout->remoteVersion >= 180000)
|
||||||
|
appendPQExpBufferStr(query, "c.relallfrozen, ");
|
||||||
|
else
|
||||||
|
appendPQExpBufferStr(query, "0 AS relallfrozen, ");
|
||||||
|
|
||||||
|
appendPQExpBufferStr(query,
|
||||||
|
"c.relhastriggers, c.relpersistence, "
|
||||||
"c.reloftype, "
|
"c.reloftype, "
|
||||||
"c.relacl, "
|
"c.relacl, "
|
||||||
"acldefault(CASE WHEN c.relkind = " CppAsString2(RELKIND_SEQUENCE)
|
"acldefault(CASE WHEN c.relkind = " CppAsString2(RELKIND_SEQUENCE)
|
||||||
@ -7183,6 +7193,7 @@ getTables(Archive *fout, int *numTables)
|
|||||||
i_relpages = PQfnumber(res, "relpages");
|
i_relpages = PQfnumber(res, "relpages");
|
||||||
i_reltuples = PQfnumber(res, "reltuples");
|
i_reltuples = PQfnumber(res, "reltuples");
|
||||||
i_relallvisible = PQfnumber(res, "relallvisible");
|
i_relallvisible = PQfnumber(res, "relallvisible");
|
||||||
|
i_relallfrozen = PQfnumber(res, "relallfrozen");
|
||||||
i_toastpages = PQfnumber(res, "toastpages");
|
i_toastpages = PQfnumber(res, "toastpages");
|
||||||
i_owning_tab = PQfnumber(res, "owning_tab");
|
i_owning_tab = PQfnumber(res, "owning_tab");
|
||||||
i_owning_col = PQfnumber(res, "owning_col");
|
i_owning_col = PQfnumber(res, "owning_col");
|
||||||
@ -7230,6 +7241,7 @@ getTables(Archive *fout, int *numTables)
|
|||||||
for (i = 0; i < ntups; i++)
|
for (i = 0; i < ntups; i++)
|
||||||
{
|
{
|
||||||
int32 relallvisible = atoi(PQgetvalue(res, i, i_relallvisible));
|
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.objType = DO_TABLE;
|
||||||
tblinfo[i].dobj.catId.tableoid = atooid(PQgetvalue(res, i, i_reltableoid));
|
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,
|
stats = getRelationStatistics(fout, &tblinfo[i].dobj,
|
||||||
tblinfo[i].relpages,
|
tblinfo[i].relpages,
|
||||||
PQgetvalue(res, i, i_reltuples),
|
PQgetvalue(res, i, i_reltuples),
|
||||||
relallvisible,
|
relallvisible, relallfrozen,
|
||||||
tblinfo[i].relkind, NULL, 0);
|
tblinfo[i].relkind, NULL, 0);
|
||||||
if (tblinfo[i].relkind == RELKIND_MATVIEW)
|
if (tblinfo[i].relkind == RELKIND_MATVIEW)
|
||||||
tblinfo[i].stats = stats;
|
tblinfo[i].stats = stats;
|
||||||
@ -7609,6 +7621,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
|
|||||||
i_relpages,
|
i_relpages,
|
||||||
i_reltuples,
|
i_reltuples,
|
||||||
i_relallvisible,
|
i_relallvisible,
|
||||||
|
i_relallfrozen,
|
||||||
i_parentidx,
|
i_parentidx,
|
||||||
i_indexdef,
|
i_indexdef,
|
||||||
i_indnkeyatts,
|
i_indnkeyatts,
|
||||||
@ -7663,7 +7676,14 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
|
|||||||
appendPQExpBufferStr(query,
|
appendPQExpBufferStr(query,
|
||||||
"SELECT t.tableoid, t.oid, i.indrelid, "
|
"SELECT t.tableoid, t.oid, i.indrelid, "
|
||||||
"t.relname AS indexname, "
|
"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, "
|
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
|
||||||
"i.indkey, i.indisclustered, "
|
"i.indkey, i.indisclustered, "
|
||||||
"c.contype, c.conname, "
|
"c.contype, c.conname, "
|
||||||
@ -7779,6 +7799,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
|
|||||||
i_relpages = PQfnumber(res, "relpages");
|
i_relpages = PQfnumber(res, "relpages");
|
||||||
i_reltuples = PQfnumber(res, "reltuples");
|
i_reltuples = PQfnumber(res, "reltuples");
|
||||||
i_relallvisible = PQfnumber(res, "relallvisible");
|
i_relallvisible = PQfnumber(res, "relallvisible");
|
||||||
|
i_relallfrozen = PQfnumber(res, "relallfrozen");
|
||||||
i_parentidx = PQfnumber(res, "parentidx");
|
i_parentidx = PQfnumber(res, "parentidx");
|
||||||
i_indexdef = PQfnumber(res, "indexdef");
|
i_indexdef = PQfnumber(res, "indexdef");
|
||||||
i_indnkeyatts = PQfnumber(res, "indnkeyatts");
|
i_indnkeyatts = PQfnumber(res, "indnkeyatts");
|
||||||
@ -7850,6 +7871,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
|
|||||||
RelStatsInfo *relstats;
|
RelStatsInfo *relstats;
|
||||||
int32 relpages = atoi(PQgetvalue(res, j, i_relpages));
|
int32 relpages = atoi(PQgetvalue(res, j, i_relpages));
|
||||||
int32 relallvisible = atoi(PQgetvalue(res, j, i_relallvisible));
|
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.objType = DO_INDEX;
|
||||||
indxinfo[j].dobj.catId.tableoid = atooid(PQgetvalue(res, j, i_tableoid));
|
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,
|
relstats = getRelationStatistics(fout, &indxinfo[j].dobj, relpages,
|
||||||
PQgetvalue(res, j, i_reltuples),
|
PQgetvalue(res, j, i_reltuples),
|
||||||
relallvisible, indexkind,
|
relallvisible, relallfrozen, indexkind,
|
||||||
indAttNames, nindAttNames);
|
indAttNames, nindAttNames);
|
||||||
|
|
||||||
contype = *(PQgetvalue(res, j, i_contype));
|
contype = *(PQgetvalue(res, j, i_contype));
|
||||||
@ -10618,9 +10640,15 @@ dumpRelationStats(Archive *fout, const RelStatsInfo *rsinfo)
|
|||||||
appendPQExpBufferStr(out, ",\n");
|
appendPQExpBufferStr(out, ",\n");
|
||||||
appendPQExpBuffer(out, "\t'relpages', '%d'::integer,\n", rsinfo->relpages);
|
appendPQExpBuffer(out, "\t'relpages', '%d'::integer,\n", rsinfo->relpages);
|
||||||
appendPQExpBuffer(out, "\t'reltuples', '%s'::real,\n", rsinfo->reltuples);
|
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);
|
rsinfo->relallvisible);
|
||||||
|
|
||||||
|
if (fout->remoteVersion >= 180000)
|
||||||
|
appendPQExpBuffer(out, ",\n\t'relallfrozen', '%d'::integer", rsinfo->relallfrozen);
|
||||||
|
|
||||||
|
appendPQExpBufferStr(out, "\n);\n");
|
||||||
|
|
||||||
|
|
||||||
/* fetch attribute stats */
|
/* fetch attribute stats */
|
||||||
appendPQExpBufferStr(query, "EXECUTE getAttributeStats(");
|
appendPQExpBufferStr(query, "EXECUTE getAttributeStats(");
|
||||||
appendStringLiteralAH(query, dobj->namespace->dobj.name, fout);
|
appendStringLiteralAH(query, dobj->namespace->dobj.name, fout);
|
||||||
|
@ -442,6 +442,7 @@ typedef struct _relStatsInfo
|
|||||||
int32 relpages;
|
int32 relpages;
|
||||||
char *reltuples;
|
char *reltuples;
|
||||||
int32 relallvisible;
|
int32 relallvisible;
|
||||||
|
int32 relallfrozen;
|
||||||
char relkind; /* 'r', 'm', 'i', etc */
|
char relkind; /* 'r', 'm', 'i', etc */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4771,7 +4771,8 @@ my %tests = (
|
|||||||
'relname',\s'dup_test_post_data_ix',\s+
|
'relname',\s'dup_test_post_data_ix',\s+
|
||||||
'relpages',\s'\d+'::integer,\s+
|
'relpages',\s'\d+'::integer,\s+
|
||||||
'reltuples',\s'\d+'::real,\s+
|
'reltuples',\s'\d+'::real,\s+
|
||||||
'relallvisible',\s'\d+'::integer\s+
|
'relallvisible',\s'\d+'::integer,\s+
|
||||||
|
'relallfrozen',\s'\d+'::integer\s+
|
||||||
\);\s+
|
\);\s+
|
||||||
\QSELECT * FROM pg_catalog.pg_restore_attribute_stats(\E\s+
|
\QSELECT * FROM pg_catalog.pg_restore_attribute_stats(\E\s+
|
||||||
'version',\s'\d+'::integer,\s+
|
'version',\s'\d+'::integer,\s+
|
||||||
|
@ -648,6 +648,11 @@ sub adjust_new_dumpfile
|
|||||||
$dump =~ s {\n(\s+'version',) '\d+'::integer,$}
|
$dump =~ s {\n(\s+'version',) '\d+'::integer,$}
|
||||||
{$1 '000000'::integer,}mg;
|
{$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).
|
# pre-v16 dumps do not know about XMLSERIALIZE(NO INDENT).
|
||||||
if ($old_version < 16)
|
if ($old_version < 16)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user