diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index d57d5568b2..c2681ced2a 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -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; } diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 71121c8663..d706f42b2d 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -3167,6 +3167,12 @@ SELECT pg_get_ruledef(0); (1 row) +SELECT pg_get_statisticsextdef(0); + pg_get_statisticsextdef +------------------------- + +(1 row) + SELECT pg_get_triggerdef(0); pg_get_triggerdef ------------------- diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out index 83d70bf9b9..0e30861ab8 100644 --- a/src/test/regress/expected/stats_ext.out +++ b/src/test/regress/expected/stats_ext.out @@ -5,6 +5,13 @@ CREATE STATISTICS ab1_a_b_stats ON (a, b) FROM ab1; DROP STATISTICS ab1_a_b_stats; CREATE SCHEMA regress_schema_2; CREATE STATISTICS regress_schema_2.ab1_a_b_stats ON (a, b) FROM ab1; +-- Let's also verify the pg_get_statisticsextdef output looks sane. +SELECT pg_get_statisticsextdef(oid) FROM pg_statistic_ext WHERE staname = 'ab1_a_b_stats'; + pg_get_statisticsextdef +--------------------------------------------------------------------- + CREATE STATISTICS regress_schema_2.ab1_a_b_stats ON (a, b) FROM ab1 +(1 row) + DROP STATISTICS regress_schema_2.ab1_a_b_stats; -- Ensure statistics are dropped when columns are CREATE STATISTICS ab1_b_c_stats ON (b, c) FROM ab1; diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql index 90dc9ceaf4..dcff0de2a5 100644 --- a/src/test/regress/sql/rules.sql +++ b/src/test/regress/sql/rules.sql @@ -1150,6 +1150,7 @@ SELECT pg_get_constraintdef(0); SELECT pg_get_functiondef(0); SELECT pg_get_indexdef(0); SELECT pg_get_ruledef(0); +SELECT pg_get_statisticsextdef(0); SELECT pg_get_triggerdef(0); SELECT pg_get_viewdef(0); SELECT pg_get_function_arguments(0); diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql index 946cb84853..8f23653a9b 100644 --- a/src/test/regress/sql/stats_ext.sql +++ b/src/test/regress/sql/stats_ext.sql @@ -7,6 +7,10 @@ DROP STATISTICS ab1_a_b_stats; CREATE SCHEMA regress_schema_2; CREATE STATISTICS regress_schema_2.ab1_a_b_stats ON (a, b) FROM ab1; + +-- Let's also verify the pg_get_statisticsextdef output looks sane. +SELECT pg_get_statisticsextdef(oid) FROM pg_statistic_ext WHERE staname = 'ab1_a_b_stats'; + DROP STATISTICS regress_schema_2.ab1_a_b_stats; -- Ensure statistics are dropped when columns are