1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-02 09:02:37 +03:00

Fix a couple of problems in pg_get_statisticsextdef

There was a thinko whereby we tested the wrong tuple after fetching it
from cache; avoid that by using generate_relation_name instead, which is
simpler.  Also, the statistics name was not qualified, so add that.  (It
could be argued that qualification should be conditional on the schema
not being on search path.  We can add that later, but at least this form
is correct.)

Author: David Rowley, Álvaro Herrera
Discussion: https://postgr.es/m/CAKJS1f8RjLeVZJ2+93pdQGuZJeBF-ifsHaFMR-q-6-Z0qxA8cA@mail.gmail.com
This commit is contained in:
Alvaro Herrera
2017-03-27 00:53:59 -03:00
parent b5635948ab
commit 2c3e47527a
5 changed files with 23 additions and 15 deletions

View File

@ -1448,11 +1448,10 @@ static char *
pg_get_statisticsext_worker(Oid statextid, bool missing_ok)
{
Form_pg_statistic_ext statextrec;
Form_pg_class pgclassrec;
HeapTuple statexttup;
HeapTuple pgclasstup;
StringInfoData buf;
int colno;
char *nsp;
statexttup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statextid));
@ -1465,20 +1464,12 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok)
statextrec = (Form_pg_statistic_ext) GETSTRUCT(statexttup);
pgclasstup = SearchSysCache1(RELOID, ObjectIdGetDatum(statextrec->starelid));
if (!HeapTupleIsValid(statexttup))
{
ReleaseSysCache(statexttup);
elog(ERROR, "cache lookup failed for relation %u", statextrec->starelid);
}
pgclassrec = (Form_pg_class) GETSTRUCT(pgclasstup);
initStringInfo(&buf);
nsp = get_namespace_name(statextrec->stanamespace);
appendStringInfo(&buf, "CREATE STATISTICS %s ON (",
quote_identifier(NameStr(statextrec->staname)));
quote_qualified_identifier(nsp,
NameStr(statextrec->staname)));
for (colno = 0; colno < statextrec->stakeys.dim1; colno++)
{
@ -1494,10 +1485,9 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok)
}
appendStringInfo(&buf, ") FROM %s",
quote_identifier(NameStr(pgclassrec->relname)));
generate_relation_name(statextrec->starelid, NIL));
ReleaseSysCache(statexttup);
ReleaseSysCache(pgclasstup);
return buf.data;
}