On this page
postgres
postgres — PostgreSQL 数据库服务器
Synopsis
postgres
[ option
...]
Description
postgres
是 PostgreSQL 数据库服务器。为了使 Client 端应用程序访问数据库,Client 端应用程序(通过网络或本地)连接到正在运行的postgres
实例。 postgres
实例然后启动一个单独的服务器进程来处理连接。
一个postgres
实例始终 Management 仅一个数据库集群的数据。数据库集群是存储在公共文件系统位置(“数据区域”)的数据库的集合。一个系统可以一次运行多个postgres
实例,只要它们使用不同的数据区域和不同的通信端口即可(请参见下文)。 postgres
启动时,它需要知道数据区的位置。该位置必须由-D
选项或PGDATA
环境变量指定。没有默认值。通常,-D
或PGDATA
直接指向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
可以出现多次以设置多个参数。
- 设置命名的运行时参数。 Chapter 19中描述了 PostgreSQL 支持的配置参数。实际上,大多数其他命令行选项都是这种参数分配的缩写形式。
-C name
- 打印指定的运行时参数的值,然后退出。 (有关详细信息,请参见上面的
-c
选项.)这可以在运行的服务器上使用,并返回postgresql.conf
的值,此调用中提供的任何参数均可对其进行修改。它不反映集群启动时提供的参数。
- 打印指定的运行时参数的值,然后退出。 (有关详细信息,请参见上面的
此选项用于与服务器实例进行交互的其他程序,例如pg_ctl,以查询配置参数值。面向用户的应用程序应改用SHOW或pg_settings
视图。
-d debug-level
- 设置调试级别。设置的值越高,将更多调试输出写入服务器日志。值从 1 到 5.也可以为特定会话传递
-d 0
,这将防止父postgres
进程的服务器日志级别传播到该会话。
- 设置调试级别。设置的值越高,将更多调试输出写入服务器日志。值从 1 到 5.也可以为特定会话传递
-D datadir
- 指定数据库配置文件的文件系统位置。有关详情,请参见Section 19.2。
-e
- 将默认日期样式设置为“欧洲”,即 Importing 日期字段的
DMY
排序。这也会导致以某些日期输出格式在月份之前打印日期。有关更多信息,请参见Section 8.5。
- 将默认日期样式设置为“欧洲”,即 Importing 日期字段的
-F
- 禁用
fsync
要求提高性能,如果出现系统崩溃,则存在数据损坏的风险。指定此选项等效于禁用fsync配置参数。使用前请阅读详细文档!
- 禁用
-h hostname
- 指定
postgres
用来侦听来自 Client 端应用程序的 TCP/IP 连接的 IP 主机名或地址。该值也可以是逗号分隔的地址列表,也可以是*
以指定在所有可用接口上进行侦听。空值表示不侦听任何 IP 地址,在这种情况下,只能使用 Unix 域套接字连接到服务器。默认为仅在 localhost 上侦听。指定此选项等效于设置listen_addresses配置参数。
- 指定
-i
- 允许远程 Client 端通过 TCP/IP(Internet 域)连接进行连接。如果没有此选项,则仅接受本地连接。此选项等效于在
postgresql.conf
或通过-h
将listen_addresses
设置为*
。
- 允许远程 Client 端通过 TCP/IP(Internet 域)连接进行连接。如果没有此选项,则仅接受本地连接。此选项等效于在
不建议使用此选项,因为它不允许访问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
配置参数的描述。
- 指定在诉诸临时磁盘文件之前内部排序和散列要使用的内存量。请参阅Section 19.4.1中有关
-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 }
- 禁止使用特定的扫描和连接方法:
s
和i
分别禁用 Sequences 扫描和索引扫描,o
,b
和t
分别禁用仅索引扫描,位图索引扫描和 TID 扫描,而n
,m
和h
禁用嵌套的-分别循环,合并和哈希联接。
- 禁止使用特定的扫描和连接方法:
Sequences 扫描和嵌套循环联接都不能完全禁用。如果优化器还有其他选择,则-fs
和-fn
选项只会阻止优化器使用这些计划类型。
-n
- 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定
postgres
将不会重新初始化共享数据结构。然后,经验丰富的系统程序员可以使用调试器检查共享内存和 signal 量状态。
- 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定
-O
- 允许修改系统表的结构。由
initdb
使用。
- 允许修改系统表的结构。由
-P
- 读取系统表时忽略系统索引,但在修改表时仍会更新索引。从损坏的系统索引中恢复时,这很有用。
-t
pa[rser] | pl[anner] | e[xecutor]
- 打印与每个主要系统模块有关的每个查询的计时统计信息。此选项不能与
-s
选项一起使用。
- 打印与每个主要系统模块有关的每个查询的计时统计信息。此选项不能与
-T
- 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定
postgres
将通过发送 signalSIGSTOP
来停止所有其他服务器进程,但不会导致它们终止。这使系统程序员可以从所有服务器进程中手动收集核心转储。
- 此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和 signal 灯。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定
-v
protocol
- 指定用于特定会话的前端/后端协议的版本号。此选项仅供内部使用。
-W
seconds
- 在执行身份验证过程之后,启动新服务器进程时,会发生这么多秒的延迟。这是为了给调试器提供附加到服务器进程的机会。
单用户模式的选项
以下选项仅适用于单用户模式(请参阅Single-User Mode)。
--single
- 选择单用户模式。这必须是命令行上的第一个参数。
database
- 指定要访问的数据库的名称。这必须是命令行上的最后一个参数。如果省略,则默认为用户名。
-E
- 执行它们之前,将所有命令回显到标准输出。
-j
- 使用分号后跟两个换行符(而不只是换行符)作为命令 Importing 终止符。
-r
filename
- 将所有服务器日志输出发送到*
filename
*。仅当作为命令行选项提供时,才使用此选项。
- 将所有服务器日志输出发送到*
Environment
PGCLIENTENCODING
- Client 端使用的默认字符编码。 (Client 端可以单独覆盖此值.)此值也可以在配置文件中设置。
PGDATA
- 默认数据目录位置
PGDATESTYLE
- DateStyle运行时参数的默认值。 (不建议使用此环境变量.)
PGPORT
- 默认端口号(最好在配置文件中设置)
Diagnostics
提及semget
或shmget
的失败消息可能表明您需要配置内核以提供足够的共享内存和 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
服务器,可以使用 signalSIGTERM
,SIGINT
或SIGQUIT
。第一个将在退出之前 await 所有 Client 端终止,第二个将强行断开所有 Client 端的连接,第三个将在没有适当关闭的情况下立即退出,从而导致在重新启动期间进行恢复。
SIGHUP
signal 将重新加载服务器配置文件。也可以将SIGHUP
发送到单个服务器进程,但这通常是不明智的。
要取消正在运行的查询,请将SIGINT
signal 发送到运行该命令的进程。要干净地终止后端进程,请将SIGTERM
发送到该进程。另请参见Section 9.26.2中的pg_cancel_backend
和pg_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.conf
中work_mem
可能存在的任何设置。请注意,参数名称中的下划线可以在命令行上写为下划线或破折号。除了短期实验以外,在postgresql.conf
中编辑设置可能比依靠命令行开关设置参数更好。