PostgreSQL 配置生成器

按硬件画像与使用场景生成带版本标注的 postgresql.conf,支持 16/17/18 版本联动与单机/主从

部署模式
目标版本

物理内存

GB

CPU 核数

核
磁盘类型
使用场景

并发连接数预估

连接
监听范围

仅本机可连接(适合与应用同机部署),listen_addresses 固定 localhost——PG 默认不对外监听

监听端口

端口
1# PostgreSQL 配置文件(postgresql.conf)— 由 DevTools 配置生成器输出(参考值,请结合 pg_stat_statements / 日志 / 监控调整)
2# 目标版本 PostgreSQL 17 | 单机 | 场景:通用 OLTP | 内存 4GB | CPU 4 核 | 磁盘 SSD
3# datadir / hba_file 等路径类参数由 initdb 与服务管理器管理,本文件为最小化常用配置,未列出参数使用内置默认值
4# 账号与口令属 pg_hba.conf 与 SQL 层(CREATE ROLE ... PASSWORD)管理,本文件不包含认证配置
5
6# Connections & Authentication
7listen_addresses = 'localhost'
8port = 5432
9max_connections = 100
10superuser_reserved_connections = 3
11password_encryption = scram-sha-256
12
13# Memory
14shared_buffers = 1024MB
15effective_cache_size = 2457MB
16work_mem = 8MB
17maintenance_work_mem = 204MB
18huge_pages = off
19
20# Write-Ahead Log & Checkpoints
21wal_level = replica
22wal_buffers = -1
23wal_compression = off
24max_wal_size = 1024MB
25min_wal_size = 128MB
26checkpoint_timeout = 5min
27checkpoint_completion_target = 0.9
28
29# Parallel Query & Planner
30max_worker_processes = 8
31max_parallel_workers = 3
32max_parallel_workers_per_gather = 1
33jit = off
34random_page_cost = 1.5
35effective_io_concurrency = 200
36default_statistics_target = 100
37
38# Autovacuum
39autovacuum = on
40autovacuum_max_workers = 3
41autovacuum_vacuum_scale_factor = 0.2
42autovacuum_vacuum_cost_limit = 200
43
44# Logging
45logging_collector = off
46log_min_duration_statement = 1000
47log_checkpoints = on
48log_line_prefix = '%m [%p] %u@%d '
49
50# Timezone
51timezone = 'Asia/Shanghai'
52log_timezone = 'Asia/Shanghai'

免责声明:输出为参考值,需结合 pg_stat_statements / 日志 / 监控数据持续调整;所有计算均在浏览器本地完成,数据不上传。

常见问题

生成的 postgresql.conf 直接可用吗?怎么生效?
可以作为起点直接使用:保存后放入 conf.d/ 目录(需主配置 include)或合并进 postgresql.conf,执行 SELECT pg_reload_conf(); / pg_ctl reload 即可让多数参数生效,条目说明中标注"需重启"的参数(如 shared_buffers)要重启实例。注意客户端接入控制属 pg_hba.conf 与 ALTER ROLE,本工具不生成;datadir 等路径类参数由 initdb 与服务管理器管理,也不在产物中。另外产物里的 huge_pages = try 与 OS 建议中"禁用透明大页(THP)"并不矛盾:前者指显式大页 hugetlbfs(官方推荐,需按 OS 建议分配 vm.nr_hugepages),后者是内核自动大页机制(官方文档明确不推荐);内存 < 16GB 时工具有意收紧为 off(官方默认 try),需要时手动改回。
work_mem 设为 8MB,是整个实例只能用 8MB 做排序吗?
不是。work_mem 是每个排序/哈希操作各自可占用的内存,不是全实例配额——官方文档原文明确提示:一条复杂查询可能同时执行多个排序/哈希操作,多个会话也可能并发执行,总内存占用可达该值的数倍。因此高并发复杂查询下实际内存远超设定值,调大前先用 EXPLAIN ANALYZE 确认是否有溢出到磁盘的 Sort/Hash。
shared_buffers 为什么只给内存的 25%?
25% 是官方文档建议的起步值(专用服务器 "a reasonable starting value is 25% of the memory"),不是上限。PostgreSQL 重度依赖操作系统页缓存(优化器经 effective_cache_size 感知),把 shared_buffers 调得过高反而挤压 OS 缓存、造成同一份数据双重缓冲;社区流传的"40% 封顶"是经验口径,官方文档并未给出。
lc_collate / lc_ctype 为什么不能出现在配置文件里?
两者在建库时即固定,直接决定文本列索引的排序序——官方 locale 文档要求必须保持不变,"or indexes on text columns would become corrupt",中途改掉索引会损坏。PostgreSQL 16 起把它们写进 postgresql.conf 会直接报 unrecognized configuration parameter;需要不同排序规则可用 COLLATE 做列级/表达式级方案。
为什么"异步 I/O"参数组只在 18 显示?
io_method 与 io_workers 是 PostgreSQL 18 新增的异步 I/O 框架参数,16/17 不存在——写进旧版本配置会因无法识别而启动失败。因此目标版本切到 16/17 时整组自动隐藏,切回 18 恢复显示。

相关工具