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

  • -B nbuffers

    • 设置服务器进程使用的共享缓冲区的数量。此参数的默认值由 initdb 自动选择。指定此选项等效于设置shared_buffers配置参数。
  • -c name=value

    • 设置命名的运行时参数。 Chapter 19中描述了 PostgreSQL 支持的配置参数。实际上,大多数其他命令行选项都是这种参数分配的缩写形式。 -c可以出现多次以设置多个参数。
  • -C name

    • 打印指定的运行时参数的值,然后退出。 (有关详细信息,请参见上面的-c选项.)这可以在运行的服务器上使用,并返回postgresql.conf的值,此调用中提供的任何参数均可对其进行修改。它不反映集群启动时提供的参数。

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

  • -d debug-level

    • 设置调试级别。设置的值越高,将更多调试输出写入服务器日志。值从 1 到 5.也可以为特定会话传递-d 0,这将防止父postgres进程的服务器日志级别传播到该会话。
  • -D datadir

    • 指定数据库配置文件的文件系统位置。有关详情,请参见Section 19.2
  • -e

    • 将默认日期样式设置为“欧洲”,即 Importing 日期字段的DMY排序。这也会导致以某些日期输出格式在月份之前打印日期。有关更多信息,请参见Section 8.5
  • -F

    • 禁用fsync要求提高性能,如果出现系统崩溃,则存在数据损坏的风险。指定此选项等效于禁用fsync配置参数。使用前请阅读详细文档!
  • -h hostname

    • 指定postgres用来侦听来自 Client 端应用程序的 TCP/IP 连接的 IP 主机名或地址。该值也可以是逗号分隔的地址列表,也可以是*以指定在所有可用接口上进行侦听。空值表示不侦听任何 IP 地址,在这种情况下,只能使用 Unix 域套接字连接到服务器。默认为仅在 localhost 上侦听。指定此选项等效于设置listen_addresses配置参数。
  • -i

    • 允许远程 Client 端通过 TCP/IP(Internet 域)连接进行连接。如果没有此选项,则仅接受本地连接。此选项等效于在postgresql.conf或通过-hlisten_addresses设置为*

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

  • -k directory

    • 指定postgres将在其上侦听来自 Client 端应用程序的连接的 Unix 域套接字的目录。该值也可以是逗号分隔的目录列表。空值表示不侦听任何 Unix 域套接字,在这种情况下,只能使用 TCP/IP 套接字连接到服务器。默认值通常为/tmp,但是可以在构建时更改。指定此选项等效于设置unix_socket_directories配置参数。
  • -l

    • 使用 SSL 启用安全连接。 PostgreSQL 必须已经编译为支持 SSL,此选项才可用。有关使用 SSL 的更多信息,请参阅Section 18.9
  • -N max-connections

    • 设置此服务器将接受的最大 Client 端连接数。此参数的默认值由 initdb 自动选择。指定此选项等效于设置max_connections配置参数。
  • -o extra-options

      • extra-options *中指定的命令行样式参数将传递给由此postgres进程启动的所有服务器进程。

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

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

  • -p port

    • 指定postgres用来侦听来自 Client 端应用程序的连接的 TCP/IP 端口或本地 Unix 域套接字文件 extensions。默认为PGPORT环境变量的值,或者如果未设置PGPORT,则默认为编译期间构建的值(通常为 5432)。如果指定的端口不是默认端口,则所有 Client 端应用程序必须使用命令行选项或PGPORT指定相同的端口。
  • -s

    • 在每个命令末尾打印时间信息和其他统计信息。这对于基准测试或调整缓冲区数很有用。
  • -S work-mem

    • 指定在诉诸临时磁盘文件之前内部排序和散列要使用的内存量。请参阅Section 19.4.1中有关work_mem配置参数的描述。
  • -V
    --version

    • 打印 postgres 版本并退出。
  • --name=value

    • 设置一个命名的运行时参数; -c的缩写。
  • --describe-config

    • 此选项以制表符分隔的COPY格式转储服务器的内部配置变量,描述和默认值。它主要设计用于 Management 工具。
  • -?
    --help

    • 显示有关 postgres 命令行参数的帮助,然后退出。

Semi-internal Options

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

  • -f { s | i | o | b | t | n | m | h }

    • 禁止使用特定的扫描和连接方法:si分别禁用 Sequences 扫描和索引扫描,obt分别禁用仅索引扫描,位图索引扫描和 TID 扫描,而nmh禁用嵌套的-分别循环,合并和哈希联接。

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

  • -n

    • 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定postgres将不会重新初始化共享数据结构。然后,经验丰富的系统程序员可以使用调试器检查共享内存和 signal 量状态。
  • -O

    • 允许修改系统表的结构。由initdb使用。
  • -P

    • 读取系统表时忽略系统索引,但在修改表时仍会更新索引。从损坏的系统索引中恢复时,这很有用。
  • -t pa[rser] | pl[anner] | e[xecutor]

    • 打印与每个主要系统模块有关的每个查询的计时统计信息。此选项不能与-s选项一起使用。
  • -T

    • 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定postgres将通过发送 signalSIGSTOP来停止所有其他服务器进程,但不会导致它们终止。这使系统程序员可以从所有服务器进程中手动收集核心转储。
  • -v protocol

    • 指定用于特定会话的前端/后端协议的版本号。此选项仅供内部使用。
  • -W seconds

    • 在执行身份验证过程之后,启动新服务器进程时,会发生这么多秒的延迟。这是为了给调试器提供附加到服务器进程的机会。

单用户模式的选项

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

  • --single

    • 选择单用户模式。这必须是命令行上的第一个参数。
  • database

    • 指定要访问的数据库的名称。这必须是命令行上的最后一个参数。如果省略,则默认为用户名。
  • -E

    • 执行它们之前,将所有命令回显到标准输出。
  • -j

    • 使用分号后跟两个换行符(而不只是换行符)作为命令 Importing 终止符。
  • -r filename

    • 将所有服务器日志输出发送到* filename *。仅当作为命令行选项提供时,才使用此选项。

Environment

  • PGCLIENTENCODING

    • Client 端使用的默认字符编码。 (Client 端可以单独覆盖此值.)此值也可以在配置文件中设置。
  • PGDATA

    • 默认数据目录位置
  • PGDATESTYLE

    • DateStyle运行时参数的默认值。 (不建议使用此环境变量.)
  • PGPORT

    • 默认端口号(最好在配置文件中设置)

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