服务器管理技巧

使用 pg_ctl,确保服务器启动/重启正确

场景: 当使用 pg_ctl 启动/重启 PostgreSQL 时,输出显示 "server starting" 但没有指示服务器是否实际启动,从而导致以下情况

elephant$ pg_ctl -D /path/to/data/ -l /tmp/pg.log start
server starting
$ psql -d postgres
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

解决方案: 使用 pg_ctl-w 命令行标志,这使得 pg_ctl 等待启动和关闭完成(在 PostgreSQL 10 之前,默认情况下只等待关闭完成)。

$ pg_ctl -w -D /path/to/data/ -l /tmp/pg.log start
waiting for server to start........ stopped waiting
pg_ctl: could not start server
Examine the log output.
在数据目录之外使用 postgresql.conf 文件

场景: 您需要将 postgresql.conf 保存在不同的位置,例如为了简化服务器管理。

解决方案: 在服务器启动时向 PostgreSQL 服务器传递 "-c config_file=/path/to/postgresql.conf"。

$ pg_ctl -D /path/to/data-directory -o "-c config_file=/path/to/postgresql.conf" -w start
waiting for server to start.... done
server started