文章目录
1、postgresql配置文件概览
2、postgresql.conf详解
3、pg_hba.conf详解
4、pg_ident.conf详解
5、线上需要调整的参数
6、总结
PostgreSQL 配置文件概览
PostgreSQL 使用三个主要的配置文件来控制服务器的行为、网络访问和用户映射。下面是对这三个文件的详细介绍:
1. postgresql.conf
这是 PostgreSQL 的主配置文件,包含了服务器运行的各种参数,包括性能调整、资源限制、日志设置、网络设置等。这些参数可以分为几个大类:
General: 通用设置,如数据目录的位置、监听的端口等。
Connection and Authentication: 连接和认证相关的设置,如最大连接数、超时设置等。
Performance: 性能相关设置,如缓存大小、工作内存等。
Logging and Replication: 日志记录和复制相关的设置,如日志级别、归档模式等。
Security: 安全相关的设置,如密码复杂度要求、SSL 设置等。
注意事项:
修改 postgresql.conf 后,需要重启 PostgreSQL 服务器或使用 pg_ctl reload 命令使更改生效。
保持文件权限安全,通常只允许 PostgreSQL 服务器进程读取。
定期审查和优化参数以适应服务器负载的变化。
2. pg_hba.conf
pg_hba.conf 文件控制着 PostgreSQL 的访问策略,定义了哪些客户端可以连接到服务器以及使用哪种认证方法。每一行代表一个访问规则,包括连接类型、目标数据库、用户、地址、认证方法等。
注意事项:
确保规则的顺序正确,因为第一个匹配的规则将应用于连接。
使用安全的认证方法,如 scram-sha-256 或 gss。
对于敏感的网络环境,避免使用 trust 方法。
定期审查和更新规则,确保只有授权的客户端能够访问。
3. pg_ident.conf
pg_ident.conf 文件用于映射操作系统用户到数据库用户,当使用 ident 或 peer 认证方法时尤其重要。每一行定义了一个映射规则,包含映射名称、系统用户名和数据库用户名。
注意事项:
确保映射规则正确,以避免未经授权的用户访问数据库。
使用正则表达式时要小心,确保它们正确匹配预期的用户名。
如果不需要复杂的映射,可以省略 pg_ident.conf 文件,使用默认行为。
postgresql.conf 详解
文件位置
data_directory 指定用于数据存储的目录。此参数只能在服务器启动时设置。
config_file 指定主服务器配置文件
hba_file 指定基于主机的身份验证的配置文件
ident_file 指定用户名映射的配置文件
external_pid_file 指定服务器应创建的以供服务器管理程序使用的其他进程 ID (PID) 文件的名称
连接设置
listen_addresses = '*' # 监听的 IP 地址;
# 使用逗号分隔的地址列表;
# 默认为 'localhost';使用 '*' 表示所有地址
# (修改后需要重新启动)
port = 5432 # 端口号(修改后需要重新启动)
max_connections = 2000 # 确定与数据库服务器的最大并发连接数。默认值通常为 100 个连接(修改后需要重新启动)
#reserved_connections = 0 # 保留连接数(修改后需要重新启动)
#superuser_reserved_connections = 3 # 超级用户保留连接数(修改后需要重新启动)
#unix_socket_directories = '/run/postgresql' # 逗号分隔的目录列表(修改后需要重新启动)
#unix_socket_group = '' # Unix socket 的群组(修改后需要重新启动)
#unix_socket_permissions = 0777 # 使用八进制表示的权限(修改后需要重新启动)
#bonjour = off # 通过 Bonjour 发布服务器信息(修改后需要重新启动)
#bonjour_name = '' # 默认为计算机名称(修改后需要重新启动)
TCP 设置
#tcp_keepalives_idle = 0 # 指定没有网络活动的时间,在此之后,操作系统应向客户端发送 TCP keepalive 消息,单位为秒;0 选择系统默认值
#tcp_keepalives_interval = 0 # 指定应重新传输客户端未确认的 TCP keepalive 消息的时间量,单位为秒;0 选择系统默认值
#tcp_keepalives_count = 0 # 指定在服务器与客户端的连接被视为失效之前可能丢失的 TCP keepalive 消息数;0 选择系统默认值
#tcp_user_timeout = 0 # 指定在强制关闭 TCP 连接之前,传输的数据可能保持未确认状态的时间量,单位为毫秒;0 选择系统默认值
#client_connection_check_interval = 0 # 在运行查询时检查客户端断开连接的时间间隔;0 表示从不检查
认证设置
#authentication_timeout = 1min # 认证超时时间,范围为 1 秒至 600 秒
#password_encryption = scram-sha-256 # 密码加密方式,可以是 scram-sha-256 或 md5
#scram_iterations = 4096 # SCRAM 加密迭代次数
#db_user_namespace = off # 是否启用数据库用户命名空间
# 使用 Kerberos 的 GSSAPI 认证
#krb_server_keyfile = 'FILE:${sysconfdir}/krb5.keytab' # Kerberos 服务端密钥文件路径
#krb_caseins_users = off # 是否区分大小写的用户名称
#gss_accept_delegation = off # 是否接受委派
SSL设置
#ssl = off # 是否启用 SSL
#ssl_ca_file = '' # CA 证书文件路径
#ssl_cert_file = 'server.crt' # 服务器证书文件路径
#ssl_crl_file = '' # 撤销列表文件路径
#ssl_crl_dir = '' # 撤销列表目录路径
#ssl_key_file = 'server.key' # 服务器私钥文件路径
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # 允许的 SSL 加密算法
#ssl_prefer_server_ciphers = on # 是否优先使用服务器端加密算法
#ssl_ecdh_curve = 'prime256v1' # ECDH 曲线
#ssl_min_protocol_version = 'TLSv1.2' # 最小的 SSL 协议版本
#ssl_max_protocol_version = '' # 最大的 SSL 协议版本
#ssl_dh_params_file = '' # DH 参数文件路径
#ssl_passphrase_command = '' # SSL 密码短语命令
#ssl_passphrase_command_supports_reload = off # SSL 密码短语命令是否支持重新加载
内存设置
shared_buffers = 128MB # 共享缓冲区大小,默认为 128kB(修改后需要重新启动)
#huge_pages = try # 使用巨大页面的设置,可以是 on、off 或 try(修改后需要重新启动)
#huge_page_size = 0 # 巨大页面的大小,0 表示使用系统默认值(修改后需要重新启动)
#temp_buffers = 8MB # 临时缓冲区大小,最小为 800kB
#max_prepared_transactions = 0 # 最大预处理事务数,0 表示禁用该功能 (修改后需要重新启动)
# 注意:不建议将 max_prepared_transactions 设置为非零,除非你确实打算使用预处理事务。
#work_mem = 4MB # 每个工作进程可用的内存大小,最小为 64kB
#hash_mem_multiplier = 2.0 # 哈希表工作内存的倍数,范围为 1 到 1000.0
#maintenance_work_mem = 64MB # 维护操作使用的内存大小,最小为 1MB
#autovacuum_work_mem = -1 # 自动清理操作使用的内存大小,最小为 1MB,-1 表示使用 maintenance_work_mem
#logical_decoding_work_mem = 64MB # 逻辑解码操作使用的内存大小,最小为 64kB
#max_stack_depth = 2MB # 栈深度的最大值,最小为 100kB
#shared_memory_type = mmap # 共享内存的类型,默认为操作系统支持的第一个选项:(修改后需要重新启动)
# mmap
# sysv
# windows
dynamic_shared_memory_type = posix # 动态共享内存的类型,默认为操作系统支持的第一个选项:(修改后需要重新启动)
# posix
# sysv
# windows
# mmap
#min_dynamic_shared_memory = 0MB # 最小动态共享内存大小
#vacuum_buffer_usage_limit = 256kB # 清理和分析缓冲区访问策略环的大小;
# 0 表示禁用清理缓冲区访问策略;
磁盘
#temp_file_limit = -1 # 每个进程临时文件空间限制,单位为千字节,-1 表示无限制
基于成本的清理延迟
#vacuum_cost_delay = 0 # 超过成本限制时进程将休眠的时间量,单位为毫秒(0 表示禁用)
#vacuum_cost_page_hit = 1 # 在共享缓冲区缓存中找到的缓冲区进行清空的估计成本
#vacuum_cost_page_miss = 2 # 清理必须从磁盘读取的缓冲区的估计成本
#vac