如何通过SQL查询指定表的autovacuum_vacuum_scale_factor等配置选项
查询指定表autovacuum_vacuum_scale_factor参数的SQL方法
你不需要依赖psql的\d+命令,直接查PostgreSQL系统表就能拿到对应配置,分两种使用场景:
查询表级自定义配置
如果表单独设置过autovacuum相关参数,配置会存在系统表pg_class的reloptions字段中,执行以下SQL即可查询:
SELECT relname AS table_name, (pg_options_to_table(reloptions)).* FROM pg_class WHERE relname = '<替换为你的目标表名>' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<替换为表所在的schema,默认填public>');
- 如果返回结果中存在
autovacuum_vacuum_scale_factor对应的config_value,就是该表单独设置的参数值 - 如果结果中没有对应条目,说明该表没有单独配置该参数,运行时会使用全局默认值
查询实际生效的参数值
如果需要直接拿到当前表运行时实际生效的参数值(自动判断是表级自定义值还是全局默认值),可以用以下SQL:
WITH target_table AS ( SELECT oid, relname, reloptions FROM pg_class WHERE relname = '<替换为你的目标表名>' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<替换为表所在的schema,默认填public>') ) SELECT relname AS scope, config_name, config_value FROM ( SELECT relname, (pg_options_to_table(reloptions)).* FROM target_table WHERE reloptions @> ARRAY['autovacuum_vacuum_scale_factor']::text[] ) t UNION ALL SELECT '全局默认' AS scope, name AS config_name, setting AS config_value FROM pg_settings WHERE name = 'autovacuum_vacuum_scale_factor' AND NOT EXISTS (SELECT 1 FROM target_table WHERE reloptions @> ARRAY['autovacuum_vacuum_scale_factor']::text[]);
补充说明:
- 如果需要查询库下所有表的该参数配置,去掉SQL中对relname的过滤条件即可
- 以上SQL普通查询权限的用户即可执行,不需要超级用户权限
- psql客户端的
\d+命令本质也是封装了对上述系统表的查询,只是做了格式化展示
内容的提问来源于stack exchange,提问作者Matías Santurio
相关产品推荐
相关产品推荐

