如何筛选出与EXPLAIN(SETTINGS true)一致的PostgreSQL查询相关配置?
匹配EXPLAIN(SETTINGS true)输出的PostgreSQL非默认配置查询
要让查询结果和EXPLAIN(..., SETTINGS true)的输出完全一致,核心是筛选出实际影响查询执行计划生成的非默认配置,以下是两种优雅的实现方式:
方式一:通过参数类别筛选(兼容性好)
利用pg_settings的category字段,只保留与查询规划、调优、执行相关的参数类别,自动排除跟踪类、日志类等不影响计划的配置:
SELECT name, setting, source, sourcefile FROM pg_settings WHERE source != 'default' AND category IN ( 'Query Tuning', 'Planning', 'Resource Usage', 'Query Behavior', 'Execution' )
这种方式兼容性强,适配全版本PostgreSQL,仅需手动排除极个别漏网的跟踪类参数(如track_activity_query_size),数量远少于100个。
方式二:通过内部标记精准匹配(最准确)
PostgreSQL会给所有需要在EXPLAIN(SETTINGS)中展示的参数打上EXPLAIN标记,可直接通过pg_settings的guc_flags字段筛选:
SELECT name, setting, source, sourcefile FROM pg_settings WHERE source != 'default' AND guc_flags LIKE '%EXPLAIN%'
这种方式完全对齐EXPLAIN(SETTINGS)的输出逻辑,无需手动排除任何参数,但注意guc_flags是内部字段,虽在PostgreSQL 12+版本稳定可用,未来版本可能存在变动。
内容的提问来源于stack exchange,提问作者VanillaDonuts
相关产品推荐
相关产品推荐

