关闭服务器

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 17. 服务器设置和操作 | 下一页

# 17.5. 关闭服务器

有好几种关闭数据库服务器的方法。通过给`postgres`进程发送不同的信号， 你就可以控制关闭服务器的不同方法。

SIGTERM

  这是智能关闭模式。接收到SIGTERM以后， 服务器不再允许新的连接，但是允许所有活跃的会话正常完成他们的工作， 只有在所有会话都结束任务后才关闭。如果服务器处在在线备份模式，它另外等待在线备份模式不再活跃。 当备份模式活跃时，将仍允许新的连接，但是只针对超级用户（这个例外允许超级用户连接以终止在线备份模式）。 如果当请求智能关闭时服务器正在恢复，那么恢复和流复制将在所有普通会话终止后停止。

SIGINT

  这是快速关闭模式。不再允许新的连接，向所有活跃服务器发送SIGTERM (让它们立刻退出)，然后等待所有子进程退出并关闭数据库。如果服务器处在在线备份模式， 备份模式将终止，使得备份无效。

SIGQUIT

  这是立即关闭模式。 服务器将发送SIGQUIT到所有子进程， 并等待它们结束。这样并不能在5秒钟之内终止，通过主`postgres` 进程发送SIGKILL，将不等待的立即结束它们。 这样做会导致下次启动时的恢复(通过重放 WAL 日志)。我们推荐只在紧急的时候使用这个方法。

pg_ctl程序提供了一个发送这些信号关闭服务器的便利接口。 另外，你在非Windows系统上可以用`kill`直接发送这些信号。 可以用`ps`命令或者从数据目录里的`postmaster.pid` 文件中找出`postgres`的PID。所以，举例来说，要做一次快速关闭：

    $ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

> 重要: 最好不要用SIGKILL来关闭服务器。这样做将阻止服务器释放共享内存和信号灯， 那样的话你只能在新服务器启动前自己手动做这件事。另外，SIGKILL直接杀死`postgres` 进程而不等它传递信号给子进程，所以我们也将必须手动的杀死独立的子进程。

当允许其他会话继续时终止一个独立的会话，使用`pg_terminate_backend()` (参见表 9-64)或发送一个SIGTERM 信号到与这个会话有关的子进程。

上一页 | 起始页 | 下一页
管理内核资源 | 上一级 | 升级一个 PostgreSQL 集群