服务器管理技巧

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

场景:使用 pg_ctl 启动/重启 PostgreSQL 时,输出显示“服务器正在启动”,但没有指示服务器是否实际启动,这会导致以下情况

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 保存在不同的位置,例如,为了使服务器管理更容易。

解决方案:在服务器启动时,将“-c config_file=/path/to/postgresql.conf”传递给 PostgreSQL 服务器。

$ 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