PostgreSQL 的安装与配置
安装
brew 安装后 brew services start postgresql@17 可以启动服务,使用 brew services list 查看服务状态。
也可以通过设定环境变量 export PGDATA=/opt/homebrew/var/postgresql@17 后使用命令 initdb 创建数据库簇,然后 pg_ctl start -D $PGDATA 启动。
停止命令为 pg_ctl stop -D $PGDATA [-m SHOWDOWN-MODE],其中 -m 是服务器停止方法:
smart: 等所有连接终止后,关闭数据库。如果客户端连不上,则无法关闭数据库。
fast: 快速关闭数据库,断开客户端连接,让已有的事务回滚,然后关闭数据库。相当于 Oracle 关闭时的 immediate 模式。
immediate: 立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要恢复。相当于 Oracle 关闭时的 abort 模式。
PostgreSQL 数据库中的 immediate 关机模式相当于 Oracle 数据库中的 abort 关机模式,而 Oracle 中的 immediate 关机模式实际上对应的是 PostgreSQL 中的 fast 模式。
配置
PostgreSQL 数据库的配置主要通过修改数据目录下的 postgresql.conf 和 pg_hba.conf 文件来实现的。
pg_hda.conf 文件是一个很白名单的访问配置文件,可以控制允许哪些 IP 地址的机器访问数据库。 默认数据库无法接受远程连接,因此默认情况下 pg_hba.conf 中没有对应的配置项,可以在文件中加入下面命令
host all all 0/0 md5该命令允许任何用户远程连接到本地数据库,连接时需要提供密码。
IP 和 端口
postgresql.conf 可以修改监听的 IP 和端口,找到以下内容:
# listen_address = 'localhost'
# port = 5432其中,“listen_address” 默认监听 “localhost”,如果要接受远程登陆,修改为 “*” 表示在本地所有地址上监听。 “port” 表示监听的数据库端口,默认 “5432”。
listen_address = '*'
port = 5432修改这两个参数要重启数据库才能生效。
日志
日志收集一般需要打开(默认开启),日志目录一般使用默认值即可
logging_collection = on
log_directory = 'pg_log'日志切换和是否覆盖可以使用如下几种不同的方案:
每天生成一个新的日志文件
PLAINTEXTlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_truncate_on_rotation = off log_rotation_age = 1d log_rotation_size = 0每当日志写满一定的大小,切换一个日志
PLAINTEXTlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_truncate_on_rotation = off log_rotation_age = 0 log_rotation_size = 10M只保留最近 7 天的日志,进行循环覆盖(默认)
PLAINTEXTlog_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = id log_rotation_size = 0
内存参数
- shared_buffers: 共享内容的大小,默认 32MB
- work_mem: 单 SQL 执行时,以及排序、Hash Join 时使用的内存,SQL 运行完毕后,该内存就会释放
其他功能
- 数据块 checksum 功能
对于一些数据可靠性很高的场景,例如金融领域,建议打开数据块校验功能使用PLAINTEXT
initdb -kpg_checksums -c检查当前数据库是否打开了 checksum 功能 (需要关闭数据库), 命令pg_checksums -e -P将数据库转换成具有 checksum 功能的数据库,其中-P参数是为了显示进度。