有好几种关闭数据库服务器的方法。通过给 postgres 进程发送不同的信号,你就可以控制关闭服务器的不同方法。
pg_ctl 程序提供了一个发送这些信号关闭服务器的便利接口。
另外,你可以用 kill 直接发送这些信号。可以用 ps 命令或者从数据目录里的 postmaster.pid 文件中找出 postgres 的 PID 。所以,举例来说,要做一次快速关闭:
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
【重要】尽可能不要用 SIGKILL 关闭服务器。这样会阻止服务器清理共享内存和信号灯资源,那样的话你只能在启动服务器之前自己手工做这件事。另外,SIGKILL 直接把 postgres 杀掉,而不会等它把信号中继给它的子进程,因此我们还需要手工杀掉每个独立子进程。