存储参数
(也称为“relopts”/“reloptions”/“关系选项”)是关系特定的参数,用于修改 PostgreSQL 与该关系的交互方式,例如 fillfactor
,它确定在表的页面上保留多少空间以供将来更新,或定义自定义的自动vacuum设置。
存储参数
是在 PostgreSQL 8.2 中引入的。
表存储参数和引入版本
参数 | 自版本 |
---|---|
autovacuum_enabled , toast.autovacuum_enabled |
8.4 |
autovacuum_analyze_scale_factor |
8.4 |
autovacuum_analyze_threshold |
8.4 |
autovacuum_freeze_max_age , toast.autovacuum_freeze_max_age |
8.4 |
autovacuum_freeze_min_age , toast.autovacuum_freeze_min_age |
8.4 |
autovacuum_freeze_table_age , toast.autovacuum_freeze_table_ag |
8.4 |
autovacuum_multixact_freeze_min_age , toast.autovacuum_multixact_freeze_min_age |
9.3 |
autovacuum_multixact_freeze_max_age , toast.autovacuum_multixact_freeze_max_age |
9.3 |
autovacuum_multixact_freeze_table_age , toast.autovacuum_multixact_freeze_table_age |
9.3 |
autovacuum_vacuum_cost_delay , toast.autovacuum_vacuum_cost_delay |
8.4 |
autovacuum_vacuum_cost_limit , toast.autovacuum_vacuum_cost_limit |
8.4 |
autovacuum_vacuum_scale_factor , toast.autovacuum_vacuum_scale_factor |
8.4 |
autovacuum_vacuum_threshold , toast.autovacuum_vacuum_threshold |
8.4 |
fillfactor |
8.2 |
log_autovacuum_min_duration , toast.log_autovacuum_min_duration |
9.2 |
parallel_insert_enabled |
14 |
parallel_workers |
9.6 |
toast_tuple_target |
11 |
user_catalog_table |
9.4 |
vacuum_index_cleanup , toast.vacuum_index_cleanup |
12 |
vacuum_truncate , toast.vacuum_truncate |
12 |
更改历史记录
- PostgreSQL 16
- PostgreSQL 14
parallel_insert_enabled
添加 (提交 c8f78b61)
- PostgreSQL 9.6
ALTER TABLE ... SET (fillfactor = ...)
可以以SHARE UPDATE EXCLUSIVE
而不是ACCESS EXCLUSIVE
锁级别执行 (提交 fcb4bfdd)ALTER TABLE ... SET (autovacuum* = ...)
可以以SHARE UPDATE EXCLUSIVE
而不是ACCESS EXCLUSIVE
锁级别执行 (提交 47167b79)
- PostgreSQL 9.4
user_catalog_table
添加 (提交 66abc260)
- PostgreSQL 9.2
log_autovacuum_min_duration
添加 (提交 9d3b5024)
- PostgreSQL 8.4
- autovacuum
存储参数
添加,替换目录表pg_autovacuum
(提交 834a6da4)
- autovacuum
- PostgreSQL 8.2
- 添加 (初始提交 277807bd)
示例
创建表时可以设置存储参数,例如
CREATE TABLE foo (id INT) WITH (fillfactor=75, log_autovacuum_min_duration=10)
并使用以下命令进行更改,例如
ALTER TABLE foo SET (log_autovacuum_min_duration=50)
关系的存储参数记录在其 pg_class 条目中的 reloptions
列(类型 TEXT[]
)中,并且可以使用 psql 中的 \d+ relname
命令显示
postgres=# \d+ foo Table "public.foo" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description --------+---------+-----------+----------+---------+---------+--------------+------------- id | integer | | | | plain | | Access method: heap Options: fillfactor=75, log_autovacuum_min_duration=50
或直接检查,例如
postgres=# SELECT unnest(reloptions) FROM pg_class WHERE oid = 'foo'::REGCLASS; unnest -------------------------------- fillfactor=75 log_autovacuum_min_duration=50 (2 rows)
或者使用函数 pg_options_to_table()
(PostgreSQL 9.1 及更高版本)
postgres=# SELECT option_name, option_value FROM pg_class c, pg_options_to_table(c.reloptions) WHERE c.oid = 'foo'::REGCLASS; option_name | option_value -----------------------------+-------------- log_autovacuum_min_duration | 50 fillfactor | 75 (2 rows)
参考文献
- PostgreSQL 文档: CREATE TABLE:存储参数
- PostgreSQL 文档: ALTER TABLE
- PostgreSQL 文档: CREATE INDEX:存储参数
- PostgreSQL 文档: ALTER INDEX