PostgreSQL 18 的 Beta 版本现已发布,现在正是深入了解其 GA 版本新特性的理想时机。其中一项令我特别关注的功能,是对统计信息导出与修正机制的改进。
以下是 PostgreSQL 官方发行说明的摘录:
Add functions to modify per-relation and per-column optimizer statistics (Corey Huinker)
Add pg_dump, pg_dumpall, and pg_restore options --statistics-only, --no-statistics, --no-data, and --no-schema (Corey Huinker, Jeff Davis)
性能分析的关键要素之一是了解表、列和索引的底层统计信息。我们经常会遇到查询在生产环境中的行为与预生产环境或用户验收测试 (UAT) 环境中的行为不同的情况。造成这种差异的一个常见原因是数据分布和统计信息的差异。我们多少次希望找到一种方法,在较低的环境中复制类似生产的统计数据,而无需复制数据和手动运行的开销ANALYZE?
借助 PostgreSQL 18,我们可以期待允许我们导出、导入甚至修改统计数据的功能——从而更容易在非生产环境中模拟生产行为,而无需实际的数据加载。

Dump Statistics.
pg_dump --statistics-only --table=public.skewed_data_int
Reset Table, Index or Materialize View Stats
pg_restore_relation_stats
Reset Attributes level statistics
pg_restore_attribute_stats
以下是pg_dump包含统计信息的示例输出。此示例输出也可在同一实例或其他环境中使用,以覆盖现有统计信息并影响执行计划。
--table or materialize views
SELECT * FROM pg_catalog.pg_restore_relation_stats(
'version', '180000'::integer,
'schemaname', 'public',
'relname', 'skewed_data_int',
'relpages', '84'::integer,
'reltuples', '10000'::real,
'relallvisible', '84'::integer,
'relallfrozen', '0'::integer
);
--columns or attributes
SELECT * FROM pg_catalog.pg_restore_attribute_stats(
'version', '180000'::integer,
'schemaname', 'public',
'relname', 'skewed_data_int',
'attname', 'categorical_col',
'inherited', 'f'::boolean,
'null_frac', '0'::real,
'avg_width', '4'::integer,
'n_distinct', '4'::real,
'most_common_vals', '{1,2,3,4}'::text,
'most_common_freqs', '{0.5999,0.3154,0.0809,0.0038}'::real[],
'correlation', '0.4595874'::real
);
--Index
SELECT * FROM pg_catalog.pg_restore_relation_stats(
'version', '180000'::integer,
'schemaname', 'public',
'relname', 'skewed_data_int_pkey',
'relpages', '30'::integer,
'reltuples', '10000'::real,
'relallvisible', '0'::integer,
'relallfrozen', '0'::integer
);
结论
统计信息是 PostgreSQL 查询规划器的核心,拥有准确或接近生产环境的统计信息会显著影响性能调优和执行计划的准确性。PostgreSQL 18 新增了导出、导入和调整统计信息的功能,为 DBA 和开发人员带来了强大的全新可能性,尤其是在测试和预生产环境中。
此功能减少了性能调查中的猜测,并提供了一种更安全、无数据的方法来模拟实际工作负载。如果您对性能非常重视,那么 PostgreSQL 18 Beta 版中的这项功能值得探索。
原文地址:https://databaserookies.wordpress.com/2025/05/10/postgresql-18-beta-preview-export-or-amend-statistics-with-ease/
原文作者:Deepak Mahto




