diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 81c9103..b3c102d 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -1453,6 +1453,7 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok) HeapTuple pgclasstup; StringInfoData buf; int colno; + char *nsp; statexttup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statextid)); @@ -1467,7 +1468,7 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok) pgclasstup = SearchSysCache1(RELOID, ObjectIdGetDatum(statextrec->starelid)); - if (!HeapTupleIsValid(statexttup)) + if (!HeapTupleIsValid(pgclasstup)) { ReleaseSysCache(statexttup); elog(ERROR, "cache lookup failed for relation %u", statextrec->starelid); @@ -1477,8 +1478,10 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok) 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++) { @@ -1493,8 +1496,10 @@ pg_get_statisticsext_worker(Oid statextid, bool missing_ok) appendStringInfoString(&buf, quote_identifier(attname)); } + nsp = get_namespace_name(pgclassrec->relnamespace); appendStringInfo(&buf, ") FROM %s", - quote_identifier(NameStr(pgclassrec->relname))); + quote_qualified_identifier(nsp, + NameStr(pgclassrec->relname))); ReleaseSysCache(statexttup); ReleaseSysCache(pgclasstup); diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 7f04c7a..e4a9ac5 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -3143,6 +3143,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 83d70bf..28a9af5 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 public.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 90dc9ce..dcff0de 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 946cb84..8f23653 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