跳转到内容

PostgreSQL/管理实例

来自维基教科书,开放的书籍,开放的世界


PostgreSQL **实例** 由在服务器上连续运行的多个进程组成。它们使用公共配置文件和 RAM 以协调的方式协同工作。因此,它们要么全部运行,要么全部不运行。

进程 *postmaster* 是其中之一。它启动、停止和控制其他进程。*postmaster* 本身可以直接启动,也可以借助包装程序 pg_ctl 启动。它的简化语法是

pg_ctl [ status | start | stop | restart | reload | init ] [-U username] [-P password] [--help]

实例必须由操作系统用户 *postgres* 运行,而不是由 *root* 运行。

pg_ctlstatus 模式下运行时,它会列出实例的实际状态。

$ pg_ctl status
pg_ctl: server is running (PID: 16244)
/usr/lib/postgresql/14/bin/postgres
$

您可以观察实例是否正在运行,以及 *postmaster* 进程的进程 ID (PID)。

pg_ctlstart 模式下运行时,它会尝试启动实例。

$ pg_ctl start
...
...
 done
server started
$

当您看到上述消息时,一切正常。

pg_ctlstop 模式下运行时,它会尝试停止实例。

$ pg_ctl stop
...
...
 done
server stopped
$

当您看到上述消息时,实例已关闭,所有与客户端应用程序的连接都已关闭,并且没有新的应用程序可以访问数据库。stop 模式知道三种不同的子模式来关闭实例

  • * 智能模式等待所有活动客户端断开连接。
  • * 快速模式(默认模式)不等待客户端断开连接。所有活动事务都将回滚,客户端将被强制断开连接。
  • * 立即模式立即中止所有服务器进程,而不会进行干净关闭。

语法:pg_ctl stop [-m s[mart] | f[ast] | i[mmediate] ]

pg_ctlrestart 模式下运行时,它执行与 stopstart 顺序相同的操作。

reload 模式下,实例会读取并重新加载其配置文件。

初始化

[编辑 | 编辑源代码]

init 模式下,实例使用 3 个数据库 *template0*、*template1* 和 *postgres* 创建一个全新的集群。此命令需要额外的参数 -D datadir 来知道它将在文件系统的哪个位置创建新集群。

启动时自动启动

[编辑 | 编辑源代码]

在大多数情况下,希望 PostgreSQL 在服务器启动后立即启动。这是否发生 - 与否 - 可以通过文件 start.conf 配置。根据操作系统的不同,该文件位于不同的 目录 中。

只有一个条目,它的允许值为

  • auto: 在服务器启动/关闭时自动启动/停止
  • manual: 不要自动启动/停止,但允许手动管理,如上所述
  • disabled: 不允许使用 pg_ctlcluster 手动启动(这很容易绕过,并且只是一种针对意外情况的小保护措施)


华夏公益教科书