PostgreSQL/管理实例
PostgreSQL **实例** 由在服务器上连续运行的多个进程组成。它们使用公共配置文件和 RAM 以协调的方式协同工作。因此,它们要么全部运行,要么全部不运行。
进程 *postmaster* 是其中之一。它启动、停止和控制其他进程。*postmaster* 本身可以直接启动,也可以借助包装程序 pg_ctl
启动。它的简化语法是
pg_ctl [ status | start | stop | restart | reload | init ] [-U username] [-P password] [--help]
实例必须由操作系统用户 *postgres* 运行,而不是由 *root* 运行。
当 pg_ctl
在 status
模式下运行时,它会列出实例的实际状态。
$ pg_ctl status pg_ctl: server is running (PID: 16244) /usr/lib/postgresql/14/bin/postgres $
您可以观察实例是否正在运行,以及 *postmaster* 进程的进程 ID (PID)。
当 pg_ctl
在 start
模式下运行时,它会尝试启动实例。
$ pg_ctl start ... ... done server started $
当您看到上述消息时,一切正常。
当 pg_ctl
在 stop
模式下运行时,它会尝试停止实例。
$ pg_ctl stop ... ... done server stopped $
当您看到上述消息时,实例已关闭,所有与客户端应用程序的连接都已关闭,并且没有新的应用程序可以访问数据库。stop
模式知道三种不同的子模式来关闭实例
- * 智能模式等待所有活动客户端断开连接。
- * 快速模式(默认模式)不等待客户端断开连接。所有活动事务都将回滚,客户端将被强制断开连接。
- * 立即模式立即中止所有服务器进程,而不会进行干净关闭。
语法:pg_ctl stop [-m s[mart] | f[ast] | i[mmediate] ]
当 pg_ctl
在 restart
模式下运行时,它执行与 stop
和 start
顺序相同的操作。
在 reload
模式下,实例会读取并重新加载其配置文件。
在 init
模式下,实例使用 3 个数据库 *template0*、*template1* 和 *postgres* 创建一个全新的集群。此命令需要额外的参数 -D datadir
来知道它将在文件系统的哪个位置创建新集群。
在大多数情况下,希望 PostgreSQL 在服务器启动后立即启动。这是否发生 - 与否 - 可以通过文件 start.conf
配置。根据操作系统的不同,该文件位于不同的 目录 中。
只有一个条目,它的允许值为
- auto: 在服务器启动/关闭时自动启动/停止
- manual: 不要自动启动/停止,但允许手动管理,如上所述
- disabled: 不允许使用 pg_ctlcluster 手动启动(这很容易绕过,并且只是一种针对意外情况的小保护措施)