diff options
author | Jeff Davis | 2025-03-25 18:16:06 +0000 |
---|---|---|
committer | Jeff Davis | 2025-03-25 18:16:06 +0000 |
commit | 650ab8aaf1957863ae14c80265e79f5d903b49fd (patch) | |
tree | 6ea530310dc773d82160cc6cc6d66893ab8ec910 /src/test | |
parent | 2a420f7995e415f4813fccf1c42ab29a3a32182f (diff) |
Stats: use schemaname/relname instead of regclass.
For import and export, use schemaname/relname rather than
regclass.
This is more natural during export, fits with the other arguments
better, and it gives better control over error handling in case we
need to downgrade more errors to warnings.
Also, use text for the argument types for schemaname, relname, and
attname so that casts to "name" are not required.
Author: Corey Huinker <corey.huinker@gmail.com>
Discussion: https://postgr.es/m/CADkLM=ceOSsx_=oe73QQ-BxUFR2Cwqum7-UP_fPe22DBY0NerA@mail.gmail.com
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/stats_import.out | 337 | ||||
-rw-r--r-- | src/test/regress/sql/stats_import.sql | 306 |
2 files changed, 436 insertions, 207 deletions
diff --git a/src/test/regress/expected/stats_import.out b/src/test/regress/expected/stats_import.out index 1f46d5e7854..48d6392b4ad 100644 --- a/src/test/regress/expected/stats_import.out +++ b/src/test/regress/expected/stats_import.out @@ -14,7 +14,8 @@ CREATE TABLE stats_import.test( ) WITH (autovacuum_enabled = false); SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', 18::integer, 'reltuples', 21::real, 'relallvisible', 24::integer, @@ -36,7 +37,7 @@ ORDER BY relname; test | 18 | 21 | 24 | 27 (1 row) -SELECT pg_clear_relation_stats('stats_import.test'::regclass); +SELECT pg_clear_relation_stats('stats_import', 'test'); pg_clear_relation_stats ------------------------- @@ -45,33 +46,49 @@ SELECT pg_clear_relation_stats('stats_import.test'::regclass); -- -- relstats tests -- ---- error: relation is wrong type +-- error: schemaname missing SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 0::oid, + 'relname', 'test', 'relpages', 17::integer); -WARNING: argument "relation" has type "oid", expected type "regclass" -ERROR: "relation" cannot be NULL +ERROR: "schemaname" cannot be NULL +-- error: relname missing +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 'stats_import', + 'relpages', 17::integer); +ERROR: "relname" cannot be NULL +--- error: schemaname is wrong type +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 3.6::float, + 'relname', 'test', + 'relpages', 17::integer); +WARNING: argument "schemaname" has type "double precision", expected type "text" +ERROR: "schemaname" cannot be NULL +--- error: relname is wrong type +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 'stats_import', + 'relname', 0::oid, + 'relpages', 17::integer); +WARNING: argument "relname" has type "oid", expected type "text" +ERROR: "relname" cannot be NULL -- error: relation not found SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 0::oid::regclass, + 'schemaname', 'stats_import', + 'relname', 'nope', 'relpages', 17::integer); -ERROR: could not open relation with OID 0 +ERROR: relation "stats_import.nope" does not exist -- error: odd number of variadic arguments cannot be pairs SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relallvisible'); ERROR: variadic arguments must be name/value pairs HINT: Provide an even number of variadic arguments that can be divided into pairs. -- error: argument name is NULL SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', NULL, '17'::integer); -ERROR: name at variadic position 3 is NULL --- error: argument name is not a text type -SELECT pg_restore_relation_stats( - 'relation', '0'::oid::regclass, - 17, '17'::integer); -ERROR: name at variadic position 3 has type "integer", expected type "text" +ERROR: name at variadic position 5 is NULL -- starting stats SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class @@ -84,7 +101,8 @@ WHERE oid = 'stats_import.test_i'::regclass; -- regular indexes have special case locking rules BEGIN; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.test_i'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test_i', 'relpages', 18::integer); pg_restore_relation_stats --------------------------- @@ -132,7 +150,8 @@ WHERE oid = 'stats_import.part_parent'::regclass; -- BEGIN; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.part_parent_i'::regclass, + 'schemaname', 'stats_import', + 'relname', 'part_parent_i', 'relpages', 2::integer); pg_restore_relation_stats --------------------------- @@ -166,7 +185,8 @@ WHERE oid = 'stats_import.part_parent_i'::regclass; -- ok: set all relstats, with version, no bounds checking SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'version', 150000::integer, 'relpages', '-17'::integer, 'reltuples', 400::real, @@ -187,7 +207,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just relpages, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', '16'::integer); pg_restore_relation_stats --------------------------- @@ -204,7 +225,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just reltuples, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'reltuples', '500'::real); pg_restore_relation_stats --------------------------- @@ -221,7 +243,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just relallvisible, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relallvisible', 5::integer); pg_restore_relation_stats --------------------------- @@ -238,7 +261,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: just relallfrozen SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'version', 150000::integer, 'relallfrozen', 3::integer); pg_restore_relation_stats @@ -256,7 +280,8 @@ WHERE oid = 'stats_import.test'::regclass; -- warn: bad relpages type, rest updated SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', 'nope'::text, 'reltuples', 400.0::real, 'relallvisible', 4::integer, @@ -277,7 +302,8 @@ WHERE oid = 'stats_import.test'::regclass; -- unrecognized argument name, rest ok SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', '171'::integer, 'nope', 10::integer); WARNING: unrecognized argument name: "nope" @@ -295,8 +321,7 @@ WHERE oid = 'stats_import.test'::regclass; (1 row) -- ok: clear stats -SELECT pg_catalog.pg_clear_relation_stats( - relation => 'stats_import.test'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'test'); pg_clear_relation_stats ------------------------- @@ -313,50 +338,71 @@ WHERE oid = 'stats_import.test'::regclass; -- invalid relkinds for statistics CREATE SEQUENCE stats_import.testseq; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.testseq'::regclass); + 'schemaname', 'stats_import', + 'relname', 'testseq'); ERROR: cannot modify statistics for relation "testseq" DETAIL: This operation is not supported for sequences. -SELECT pg_catalog.pg_clear_relation_stats( - 'stats_import.testseq'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'testseq'); ERROR: cannot modify statistics for relation "testseq" DETAIL: This operation is not supported for sequences. CREATE VIEW stats_import.testview AS SELECT * FROM stats_import.test; -SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.testview'::regclass); -ERROR: cannot modify statistics for relation "testview" -DETAIL: This operation is not supported for views. -SELECT pg_catalog.pg_clear_relation_stats( - 'stats_import.testview'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'testview'); ERROR: cannot modify statistics for relation "testview" DETAIL: This operation is not supported for views. -- -- attribute stats -- --- error: object does not exist +-- error: schemaname missing +SELECT pg_catalog.pg_restore_attribute_stats( + 'relname', 'test', + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); +ERROR: "schemaname" cannot be NULL +-- error: schema does not exist +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'nope', + 'relname', 'test', + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); +ERROR: schema "nope" does not exist +-- error: relname missing SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', '0'::oid::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.1::real); -ERROR: could not open relation with OID 0 --- error: relation null +ERROR: "relname" cannot be NULL +-- error: relname does not exist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', NULL::oid::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'nope', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.1::real); -ERROR: "relation" cannot be NULL +ERROR: relation "stats_import.nope" does not exist +-- error: relname null +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'stats_import', + 'relname', NULL, + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); +ERROR: "relname" cannot be NULL -- error: NULL attname SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', NULL::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', NULL, 'inherited', false::boolean, 'null_frac', 0.1::real); ERROR: must specify either attname or attnum -- error: attname doesn't exist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'nope'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'nope', 'inherited', false::boolean, 'null_frac', 0.1::real, 'avg_width', 2::integer, @@ -364,36 +410,41 @@ SELECT pg_catalog.pg_restore_attribute_stats( ERROR: column "nope" of relation "test" does not exist -- error: both attname and attnum SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'attnum', 1::smallint, 'inherited', false::boolean, 'null_frac', 0.1::real); ERROR: cannot specify both attname and attnum -- error: neither attname nor attnum SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'inherited', false::boolean, 'null_frac', 0.1::real); ERROR: must specify either attname or attnum -- error: attribute is system column SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'xmin'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'xmin', 'inherited', false::boolean, 'null_frac', 0.1::real); ERROR: cannot modify statistics on system column "xmin" -- error: inherited null SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', NULL::boolean, 'null_frac', 0.1::real); ERROR: "inherited" cannot be NULL -- ok: just the fixed values, with version, no stakinds SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'version', 150000::integer, 'null_frac', 0.2::real, @@ -421,7 +472,8 @@ AND attname = 'id'; -- for any stat-having relation. -- SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'attnum', 1::smallint, 'inherited', false::boolean, 'null_frac', 0.4::real); @@ -443,8 +495,9 @@ AND attname = 'id'; -- warn: unrecognized argument name, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.2::real, 'nope', 0.5::real); @@ -467,8 +520,9 @@ AND attname = 'id'; -- warn: mcv / mcf null mismatch part 1, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.21::real, 'most_common_freqs', '{0.1,0.2,0.3}'::real[] @@ -492,8 +546,9 @@ AND attname = 'id'; -- warn: mcv / mcf null mismatch part 2, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.21::real, 'most_common_vals', '{1,2,3}'::text @@ -517,8 +572,9 @@ AND attname = 'id'; -- warn: mcf type mismatch, mcv-pair fails, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.22::real, 'most_common_vals', '{2,1,3}'::text, @@ -544,8 +600,9 @@ AND attname = 'id'; -- warn: mcv cast failure, mcv-pair fails, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.23::real, 'most_common_vals', '{2,four,3}'::text, @@ -570,8 +627,9 @@ AND attname = 'id'; -- ok: mcv+mcf SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'most_common_vals', '{2,1,3}'::text, 'most_common_freqs', '{0.3,0.25,0.05}'::real[] @@ -594,8 +652,9 @@ AND attname = 'id'; -- warn: NULL in histogram array, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.24::real, 'histogram_bounds', '{1,NULL,3,4}'::text @@ -619,8 +678,9 @@ AND attname = 'id'; -- ok: histogram_bounds SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'histogram_bounds', '{1,2,3,4}'::text ); @@ -642,8 +702,9 @@ AND attname = 'id'; -- warn: elem_count_histogram null element, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.25::real, 'elem_count_histogram', '{1,1,NULL,1,1,1,1,1}'::real[] @@ -667,8 +728,9 @@ AND attname = 'tags'; -- ok: elem_count_histogram SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.26::real, 'elem_count_histogram', '{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}'::real[] @@ -691,8 +753,9 @@ AND attname = 'tags'; -- warn: range stats on a scalar type, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.27::real, 'range_empty_frac', 0.5::real, @@ -718,8 +781,9 @@ AND attname = 'id'; -- warn: range_empty_frac range_length_hist null mismatch, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.28::real, 'range_length_histogram', '{399,499,Infinity}'::text @@ -743,8 +807,9 @@ AND attname = 'arange'; -- warn: range_empty_frac range_length_hist null mismatch part 2, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.29::real, 'range_empty_frac', 0.5::real @@ -768,8 +833,9 @@ AND attname = 'arange'; -- ok: range_empty_frac + range_length_hist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'range_empty_frac', 0.5::real, 'range_length_histogram', '{399,499,Infinity}'::text @@ -792,8 +858,9 @@ AND attname = 'arange'; -- warn: range bounds histogram on scalar, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.31::real, 'range_bounds_histogram', '{"[-1,1)","[0,4)","[1,4)","[1,100)"}'::text @@ -818,8 +885,9 @@ AND attname = 'id'; -- ok: range_bounds_histogram SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'range_bounds_histogram', '{"[-1,1)","[0,4)","[1,4)","[1,100)"}'::text ); @@ -841,8 +909,9 @@ AND attname = 'arange'; -- warn: cannot set most_common_elems for range type, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.32::real, 'most_common_elems', '{3,1}'::text, @@ -868,8 +937,9 @@ AND attname = 'arange'; -- warn: scalars can't have mcelem, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.33::real, 'most_common_elems', '{1,3}'::text, @@ -895,8 +965,9 @@ AND attname = 'id'; -- warn: mcelem / mcelem mismatch, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.34::real, 'most_common_elems', '{one,two}'::text @@ -920,8 +991,9 @@ AND attname = 'tags'; -- warn: mcelem / mcelem null mismatch part 2, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.35::real, 'most_common_elem_freqs', '{0.3,0.2,0.2,0.3}'::real[] @@ -945,8 +1017,9 @@ AND attname = 'tags'; -- ok: mcelem SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'most_common_elems', '{one,three}'::text, 'most_common_elem_freqs', '{0.3,0.2,0.2,0.3,0.0}'::real[] @@ -969,8 +1042,9 @@ AND attname = 'tags'; -- warn: scalars can't have elem_count_histogram, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.36::real, 'elem_count_histogram', '{1,1,1,1,1,1,1,1,1,1}'::real[] @@ -1022,8 +1096,9 @@ SELECT s.schemaname, s.tablename, s.attname, s.inherited, r.* FROM pg_catalog.pg_stats AS s CROSS JOIN LATERAL pg_catalog.pg_restore_attribute_stats( - 'relation', ('stats_import.' || s.tablename || '_clone')::regclass, - 'attname', s.attname, + 'schemaname', 'stats_import', + 'relname', s.tablename::text || '_clone', + 'attname', s.attname::text, 'inherited', s.inherited, 'version', 150000, 'null_frac', s.null_frac, @@ -1200,9 +1275,10 @@ AND attname = 'arange'; (1 row) SELECT pg_catalog.pg_clear_attribute_stats( - relation => 'stats_import.test'::regclass, - attname => 'arange'::name, - inherited => false::boolean); + schemaname => 'stats_import', + relname => 'test', + attname => 'arange', + inherited => false); pg_clear_attribute_stats -------------------------- @@ -1219,6 +1295,53 @@ AND attname = 'arange'; 0 (1 row) +-- temp tables +CREATE TEMP TABLE stats_temp(i int); +SELECT pg_restore_relation_stats( + 'schemaname', 'pg_temp', + 'relname', 'stats_temp', + 'relpages', '-19'::integer, + 'reltuples', 401::real, + 'relallvisible', 5::integer, + 'relallfrozen', 3::integer); + pg_restore_relation_stats +--------------------------- + t +(1 row) + +SELECT relname, relpages, reltuples, relallvisible, relallfrozen +FROM pg_class +WHERE oid = 'pg_temp.stats_temp'::regclass +ORDER BY relname; + relname | relpages | reltuples | relallvisible | relallfrozen +------------+----------+-----------+---------------+-------------- + stats_temp | -19 | 401 | 5 | 3 +(1 row) + +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'pg_temp', + 'relname', 'stats_temp', + 'attname', 'i', + 'inherited', false::boolean, + 'null_frac', 0.0123::real + ); + pg_restore_attribute_stats +---------------------------- + t +(1 row) + +SELECT tablename, null_frac +FROM pg_stats +WHERE schemaname like 'pg_temp%' +AND tablename = 'stats_temp' +AND inherited = false +AND attname = 'i'; + tablename | null_frac +------------+----------- + stats_temp | 0.0123 +(1 row) + +DROP TABLE stats_temp; DROP SCHEMA stats_import CASCADE; NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to type stats_import.complex_type diff --git a/src/test/regress/sql/stats_import.sql b/src/test/regress/sql/stats_import.sql index 0ec590688c2..d140733a750 100644 --- a/src/test/regress/sql/stats_import.sql +++ b/src/test/regress/sql/stats_import.sql @@ -17,7 +17,8 @@ CREATE TABLE stats_import.test( SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', 18::integer, 'reltuples', 21::real, 'relallvisible', 24::integer, @@ -32,37 +33,52 @@ FROM pg_class WHERE oid = 'stats_import.test'::regclass ORDER BY relname; -SELECT pg_clear_relation_stats('stats_import.test'::regclass); +SELECT pg_clear_relation_stats('stats_import', 'test'); -- -- relstats tests -- ---- error: relation is wrong type +-- error: schemaname missing SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 0::oid, + 'relname', 'test', + 'relpages', 17::integer); + +-- error: relname missing +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 'stats_import', + 'relpages', 17::integer); + +--- error: schemaname is wrong type +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 3.6::float, + 'relname', 'test', + 'relpages', 17::integer); + +--- error: relname is wrong type +SELECT pg_catalog.pg_restore_relation_stats( + 'schemaname', 'stats_import', + 'relname', 0::oid, 'relpages', 17::integer); -- error: relation not found SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 0::oid::regclass, + 'schemaname', 'stats_import', + 'relname', 'nope', 'relpages', 17::integer); -- error: odd number of variadic arguments cannot be pairs SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relallvisible'); -- error: argument name is NULL SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', NULL, '17'::integer); --- error: argument name is not a text type -SELECT pg_restore_relation_stats( - 'relation', '0'::oid::regclass, - 17, '17'::integer); - -- starting stats SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class @@ -71,7 +87,8 @@ WHERE oid = 'stats_import.test_i'::regclass; -- regular indexes have special case locking rules BEGIN; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.test_i'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test_i', 'relpages', 18::integer); SELECT mode FROM pg_locks @@ -108,7 +125,8 @@ WHERE oid = 'stats_import.part_parent'::regclass; BEGIN; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.part_parent_i'::regclass, + 'schemaname', 'stats_import', + 'relname', 'part_parent_i', 'relpages', 2::integer); SELECT mode FROM pg_locks @@ -127,7 +145,8 @@ WHERE oid = 'stats_import.part_parent_i'::regclass; -- ok: set all relstats, with version, no bounds checking SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'version', 150000::integer, 'relpages', '-17'::integer, 'reltuples', 400::real, @@ -140,7 +159,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just relpages, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', '16'::integer); SELECT relpages, reltuples, relallvisible, relallfrozen @@ -149,7 +169,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just reltuples, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'reltuples', '500'::real); SELECT relpages, reltuples, relallvisible, relallfrozen @@ -158,7 +179,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: set just relallvisible, rest stay same SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relallvisible', 5::integer); SELECT relpages, reltuples, relallvisible, relallfrozen @@ -167,7 +189,8 @@ WHERE oid = 'stats_import.test'::regclass; -- ok: just relallfrozen SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'version', 150000::integer, 'relallfrozen', 3::integer); @@ -177,7 +200,8 @@ WHERE oid = 'stats_import.test'::regclass; -- warn: bad relpages type, rest updated SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', 'nope'::text, 'reltuples', 400.0::real, 'relallvisible', 4::integer, @@ -189,7 +213,8 @@ WHERE oid = 'stats_import.test'::regclass; -- unrecognized argument name, rest ok SELECT pg_restore_relation_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'relpages', '171'::integer, 'nope', 10::integer); @@ -198,8 +223,7 @@ FROM pg_class WHERE oid = 'stats_import.test'::regclass; -- ok: clear stats -SELECT pg_catalog.pg_clear_relation_stats( - relation => 'stats_import.test'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'test'); SELECT relpages, reltuples, relallvisible FROM pg_class @@ -209,48 +233,70 @@ WHERE oid = 'stats_import.test'::regclass; CREATE SEQUENCE stats_import.testseq; SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.testseq'::regclass); + 'schemaname', 'stats_import', + 'relname', 'testseq'); -SELECT pg_catalog.pg_clear_relation_stats( - 'stats_import.testseq'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'testseq'); CREATE VIEW stats_import.testview AS SELECT * FROM stats_import.test; -SELECT pg_catalog.pg_restore_relation_stats( - 'relation', 'stats_import.testview'::regclass); - -SELECT pg_catalog.pg_clear_relation_stats( - 'stats_import.testview'::regclass); +SELECT pg_catalog.pg_clear_relation_stats(schemaname => 'stats_import', relname => 'testview'); -- -- attribute stats -- --- error: object does not exist +-- error: schemaname missing +SELECT pg_catalog.pg_restore_attribute_stats( + 'relname', 'test', + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); + +-- error: schema does not exist +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'nope', + 'relname', 'test', + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); + +-- error: relname missing +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'stats_import', + 'attname', 'id', + 'inherited', false::boolean, + 'null_frac', 0.1::real); + +-- error: relname does not exist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', '0'::oid::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'nope', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.1::real); --- error: relation null +-- error: relname null SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', NULL::oid::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', NULL, + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.1::real); -- error: NULL attname SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', NULL::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', NULL, 'inherited', false::boolean, 'null_frac', 0.1::real); -- error: attname doesn't exist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'nope'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'nope', 'inherited', false::boolean, 'null_frac', 0.1::real, 'avg_width', 2::integer, @@ -258,36 +304,41 @@ SELECT pg_catalog.pg_restore_attribute_stats( -- error: both attname and attnum SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'attnum', 1::smallint, 'inherited', false::boolean, 'null_frac', 0.1::real); -- error: neither attname nor attnum SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'inherited', false::boolean, 'null_frac', 0.1::real); -- error: attribute is system column SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'xmin'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'xmin', 'inherited', false::boolean, 'null_frac', 0.1::real); -- error: inherited null SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', NULL::boolean, 'null_frac', 0.1::real); -- ok: just the fixed values, with version, no stakinds SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'version', 150000::integer, 'null_frac', 0.2::real, @@ -307,7 +358,8 @@ AND attname = 'id'; -- for any stat-having relation. -- SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, + 'schemaname', 'stats_import', + 'relname', 'test', 'attnum', 1::smallint, 'inherited', false::boolean, 'null_frac', 0.4::real); @@ -321,8 +373,9 @@ AND attname = 'id'; -- warn: unrecognized argument name, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.2::real, 'nope', 0.5::real); @@ -336,8 +389,9 @@ AND attname = 'id'; -- warn: mcv / mcf null mismatch part 1, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.21::real, 'most_common_freqs', '{0.1,0.2,0.3}'::real[] @@ -352,8 +406,9 @@ AND attname = 'id'; -- warn: mcv / mcf null mismatch part 2, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.21::real, 'most_common_vals', '{1,2,3}'::text @@ -368,8 +423,9 @@ AND attname = 'id'; -- warn: mcf type mismatch, mcv-pair fails, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.22::real, 'most_common_vals', '{2,1,3}'::text, @@ -385,8 +441,9 @@ AND attname = 'id'; -- warn: mcv cast failure, mcv-pair fails, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.23::real, 'most_common_vals', '{2,four,3}'::text, @@ -402,8 +459,9 @@ AND attname = 'id'; -- ok: mcv+mcf SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'most_common_vals', '{2,1,3}'::text, 'most_common_freqs', '{0.3,0.25,0.05}'::real[] @@ -418,8 +476,9 @@ AND attname = 'id'; -- warn: NULL in histogram array, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.24::real, 'histogram_bounds', '{1,NULL,3,4}'::text @@ -434,8 +493,9 @@ AND attname = 'id'; -- ok: histogram_bounds SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'histogram_bounds', '{1,2,3,4}'::text ); @@ -449,8 +509,9 @@ AND attname = 'id'; -- warn: elem_count_histogram null element, rest get set SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.25::real, 'elem_count_histogram', '{1,1,NULL,1,1,1,1,1}'::real[] @@ -465,8 +526,9 @@ AND attname = 'tags'; -- ok: elem_count_histogram SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.26::real, 'elem_count_histogram', '{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}'::real[] @@ -481,8 +543,9 @@ AND attname = 'tags'; -- warn: range stats on a scalar type, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.27::real, 'range_empty_frac', 0.5::real, @@ -498,8 +561,9 @@ AND attname = 'id'; -- warn: range_empty_frac range_length_hist null mismatch, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.28::real, 'range_length_histogram', '{399,499,Infinity}'::text @@ -514,8 +578,9 @@ AND attname = 'arange'; -- warn: range_empty_frac range_length_hist null mismatch part 2, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.29::real, 'range_empty_frac', 0.5::real @@ -530,8 +595,9 @@ AND attname = 'arange'; -- ok: range_empty_frac + range_length_hist SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'range_empty_frac', 0.5::real, 'range_length_histogram', '{399,499,Infinity}'::text @@ -546,8 +612,9 @@ AND attname = 'arange'; -- warn: range bounds histogram on scalar, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.31::real, 'range_bounds_histogram', '{"[-1,1)","[0,4)","[1,4)","[1,100)"}'::text @@ -562,8 +629,9 @@ AND attname = 'id'; -- ok: range_bounds_histogram SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'range_bounds_histogram', '{"[-1,1)","[0,4)","[1,4)","[1,100)"}'::text ); @@ -577,8 +645,9 @@ AND attname = 'arange'; -- warn: cannot set most_common_elems for range type, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'arange'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'arange', 'inherited', false::boolean, 'null_frac', 0.32::real, 'most_common_elems', '{3,1}'::text, @@ -594,8 +663,9 @@ AND attname = 'arange'; -- warn: scalars can't have mcelem, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.33::real, 'most_common_elems', '{1,3}'::text, @@ -611,8 +681,9 @@ AND attname = 'id'; -- warn: mcelem / mcelem mismatch, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.34::real, 'most_common_elems', '{one,two}'::text @@ -627,8 +698,9 @@ AND attname = 'tags'; -- warn: mcelem / mcelem null mismatch part 2, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'null_frac', 0.35::real, 'most_common_elem_freqs', '{0.3,0.2,0.2,0.3}'::real[] @@ -643,8 +715,9 @@ AND attname = 'tags'; -- ok: mcelem SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'tags'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'tags', 'inherited', false::boolean, 'most_common_elems', '{one,three}'::text, 'most_common_elem_freqs', '{0.3,0.2,0.2,0.3,0.0}'::real[] @@ -659,8 +732,9 @@ AND attname = 'tags'; -- warn: scalars can't have elem_count_histogram, rest ok SELECT pg_catalog.pg_restore_attribute_stats( - 'relation', 'stats_import.test'::regclass, - 'attname', 'id'::name, + 'schemaname', 'stats_import', + 'relname', 'test', + 'attname', 'id', 'inherited', false::boolean, 'null_frac', 0.36::real, 'elem_count_histogram', '{1,1,1,1,1,1,1,1,1,1}'::real[] @@ -707,8 +781,9 @@ SELECT s.schemaname, s.tablename, s.attname, s.inherited, r.* FROM pg_catalog.pg_stats AS s CROSS JOIN LATERAL pg_catalog.pg_restore_attribute_stats( - 'relation', ('stats_import.' || s.tablename || '_clone')::regclass, - 'attname', s.attname, + 'schemaname', 'stats_import', + 'relname', s.tablename::text || '_clone', + 'attname', s.attname::text, 'inherited', s.inherited, 'version', 150000, 'null_frac', s.null_frac, @@ -853,9 +928,10 @@ AND inherited = false AND attname = 'arange'; SELECT pg_catalog.pg_clear_attribute_stats( - relation => 'stats_import.test'::regclass, - attname => 'arange'::name, - inherited => false::boolean); + schemaname => 'stats_import', + relname => 'test', + attname => 'arange', + inherited => false); SELECT COUNT(*) FROM pg_stats @@ -864,4 +940,34 @@ AND tablename = 'test' AND inherited = false AND attname = 'arange'; +-- temp tables +CREATE TEMP TABLE stats_temp(i int); +SELECT pg_restore_relation_stats( + 'schemaname', 'pg_temp', + 'relname', 'stats_temp', + 'relpages', '-19'::integer, + 'reltuples', 401::real, + 'relallvisible', 5::integer, + 'relallfrozen', 3::integer); + +SELECT relname, relpages, reltuples, relallvisible, relallfrozen +FROM pg_class +WHERE oid = 'pg_temp.stats_temp'::regclass +ORDER BY relname; + +SELECT pg_catalog.pg_restore_attribute_stats( + 'schemaname', 'pg_temp', + 'relname', 'stats_temp', + 'attname', 'i', + 'inherited', false::boolean, + 'null_frac', 0.0123::real + ); + +SELECT tablename, null_frac +FROM pg_stats +WHERE schemaname like 'pg_temp%' +AND tablename = 'stats_temp' +AND inherited = false +AND attname = 'i'; +DROP TABLE stats_temp; DROP SCHEMA stats_import CASCADE; |