postgres

postgres — PostgreSQL 数据库服务器

Synopsis

postgres [ option ...]

Description

postgres是 PostgreSQL 数据库服务器。为了使 Client 端应用程序访问数据库,Client 端应用程序(通过网络或本地)连接到正在运行的postgres实例。 postgres实例然后启动一个单独的服务器进程来处理连接。

一个postgres实例始终 Management 仅一个数据库集群的数据。数据库集群是存储在公共文件系统位置(“数据区域”)的数据库的集合。一个系统可以一次运行多个postgres实例,只要它们使用不同的数据区域和不同的通信端口即可(请参见下文)。 postgres启动时,它需要知道数据区的位置。该位置必须由-D选项或PGDATA环境变量指定。没有默认值。通常,-DPGDATA直接指向initdb创建的数据区域目录。其他可能的文件布局在Section 19.2中讨论。

默认情况下,postgres从前台开始,并将日志消息打印到标准错误流。在实际应用中,postgres应该作为后台进程(可能在引导时)启动。

也可以在单用户模式下调用postgres命令。此模式的主要用途是在initdb引导期间。有时,它用于调试或灾难恢复;请注意,运行单用户服务器并不 true 适合调试服务器,因为不会发生现实的进程间通信和锁定。当从 Shell 以单用户模式调用时,用户可以 Importing 查询,结果将显示在屏幕上,但其形式对开发人员而言比最终用户更有用。在单用户模式下,将会话用户设置为 ID 为 1 的用户,并将隐式超级用户权限授予该用户。该用户实际上不必存在,因此可以使用单用户模式来手动从系统目录的某些意外损坏中恢复。

Options

postgres接受以下命令行参数。有关选项的详细讨论,请参见Chapter 19。您可以通过设置配置文件来保存大多数这些选项的键入。还可以从连接的 Client 端以与应用程序相关的方式设置一些(安全)选项,以仅适用于该会话。例如,如果设置了环境变量PGOPTIONS,则基于 libpq 的 Client 端会将该字符串传递给服务器,服务器会将其解释为postgres命令行选项。

General Purpose

此选项用于与服务器实例进行交互的其他程序,例如pg_ctl,以查询配置参数值。面向用户的应用程序应改用SHOWpg_settings视图。

不建议使用此选项,因为它不允许访问listen_addresses的全部功能。通常最好直接设置listen_addresses

除非使用反斜杠(\)进行转义,否则* extra-options *中的空格应视为分隔参数。写\\代表 Literals 反斜杠。也可以通过多次使用-o来指定多个参数。

该选项的使用已过时。服务器进程的所有命令行选项都可以直接在postgres命令行上指定。

Semi-internal Options

此处描述的选项主要用于调试目的,在某些情况下还可以帮助恢复严重损坏的数据库。应该没有理由在生产数据库设置中使用它们。它们仅在此处列出,供 PostgreSQL 系统开发人员使用。此外,这些选项可能会更改或在将来的版本中删除,恕不另行通知。

Sequences 扫描和嵌套循环联接都不能完全禁用。如果优化器还有其他选择,则-fs-fn选项只会阻止优化器使用这些计划类型。

单用户模式的选项

以下选项仅适用于单用户模式(请参阅Single-User Mode)。

Environment

Diagnostics

提及semgetshmget的失败消息可能表明您需要配置内核以提供足够的共享内存和 signal 灯。有关更多讨论,请参见Section 18.4。您可以减少shared_buffers以减少 PostgreSQL 的共享内存消耗,和/或减少max_connections以减少 signal 灯消耗,从而推迟重新配置内核。

应当仔细检查一条错误消息,提示已经在运行另一台服务器,例如,使用以下命令

$ ps ax | grep postgres

or

$ ps -ef | grep postgres

取决于您的系统。如果确定没有冲突的服务器正在运行,则可以删除消息中提到的锁定文件,然后重试。

指示无法绑定端口的失败消息可能表示该端口已被某些非 PostgreSQL 进程使用。如果终止postgres并立即使用同一端口重新启动它,也可能会收到此错误;在这种情况下,您只需 await 几秒钟,直到 os 关闭端口,然后再试一次即可。最后,如果您指定 os 认为已保留的端口号,则可能会出现此错误。例如,许多版本的 Unix 认为 1024 以下的端口号是“可信的”,并且仅允许 Unix 超级用户访问它们。

Notes

Util 命令pg_ctl可用于安全舒适地启动和关闭postgres服务器。

如果可能,不要使用SIGKILL杀死主要的postgres服务器。这样做将防止postgres在终止之前释放其拥有的系统资源(例如,共享内存和 signal 灯)。这可能会导致重新开始postgres运行的问题。

要正常终止postgres服务器,可以使用 signalSIGTERMSIGINTSIGQUIT。第一个将在退出之前 await 所有 Client 端终止,第二个将强行断开所有 Client 端的连接,第三个将在没有适当关闭的情况下立即退出,从而导致在重新启动期间进行恢复。

SIGHUPsignal 将重新加载服务器配置文件。也可以将SIGHUP发送到单个服务器进程,但这通常是不明智的。

要取消正在运行的查询,请将SIGINTsignal 发送到运行该命令的进程。要干净地终止后端进程,请将SIGTERM发送到该进程。另请参见Section 9.26.2中的pg_cancel_backendpg_terminate_backend,以获取这两个动作的 SQL 调用等效项。

postgres服务器使用SIGQUIT来通知从属服务器进程终止而不进行常规清理。用户不应该*使用该 signal。将SIGKILL发送到服务器进程也是不明智的-主postgres进程会将其解释为崩溃,并将所有同级进程强制退出作为其标准崩溃恢复过程的一部分。

Bugs

--选项在 FreeBSD 或 OpenBSD 上不起作用。请改用-c。这是受影响的 os 中的错误;如果未解决,则将来的 PostgreSQL 版本将提供解决方法。

Single-User Mode

要启动单用户模式服务器,请使用类似以下的命令

postgres --single -D /usr/local/pgsql/data other-options my_database

使用-D提供到数据库目录的正确路径,或确保设置了环境变量PGDATA。还指定您要使用的特定数据库的名称。

通常,单用户模式服务器将换行符视为命令 Importing 终止符;像 psql 一样,没有关于分号的信息。要跨多行 continue 执行命令,必须在除最后一行以外的每个换行之前键入反斜杠。反斜杠和相邻的换行符都从 Importing 命令中删除。请注意,即使在字符串 Literals 或 Comments 中,也会发生这种情况。

但是,如果您使用-j命令行开关,则单个换行符不会终止命令 Importing。相反,序列分号-换行符-换行符可以。即,键入一个分号,然后紧跟一个完全空的行。在此模式下,反斜杠换行符不会被特殊处理。同样,在字符串 Literals 或 Comments 中不存在有关此类序列的信息。

在任何一种 Importing 模式下,如果键入的分号都不只是命令 Importing 终止符的前面或一部分,则它被视为命令分隔符。当您键入命令 Importing 终止符时,您 Importing 的多个语句将作为单个事务执行。

要退出会话,请键入 EOF(通常是 Control D )。如果自上一个命令 Importing 终止符以来 Importing 了任何文本,则 EOF 将被视为命令 Importing 终止符,并且需要另一个 EOF 退出。

请注意,单用户模式服务器不提供复杂的行编辑功能(例如,没有命令历史记录)。单用户模式也不执行任何后台处理,例如自动检查点或复制。

Examples

要使用默认值在后台启动postgres,请键入:

$ nohup postgres >logfile 2>&1 </dev/null &

要以特定端口开头postgres,例如 1234:

$ postgres -p 1234

要使用 psql 连接到该服务器,请使用-p 选项指定此端口:

$ psql -p 1234

或设置环境变量PGPORT

$ export PGPORT=1234
$ psql

可以使用以下两种样式之一设置命名的运行时参数:

$ postgres -c work_mem=1234
$ postgres --work-mem=1234

两种形式都将覆盖postgresql.confwork_mem可能存在的任何设置。请注意,参数名称中的下划线可以在命令行上写为下划线或破折号。除了短期实验以外,在postgresql.conf中编辑设置可能比依靠命令行开关设置参数更好。

See Also

initdb, pg_ctl

上一章 首页 下一章