Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

postgres

postgres — PostgreSQL 数据库服务器

摘要

postgres [选项...]

说明

postgresPostgreSQL 数据库服务器。为了让一个客户端应用程序访问一个数据库,他需要连接(通过网络或本地)到一个运行中的 postgres 实例。postgres 实例随后启动一个单独的服务器进程来处理连接。

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

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

postgres 命令还可以在单用户模式下调用。此模式的主要用途是在由 initdb 引导期间。它有时用于调试或灾难恢复;请注意,由于不会发生实际的进程间通信和锁定,所以单用户服务器实际上不适合用于调试服务器。在从 shell 中以单用户模式调用时,用户可以输入查询,结果将被打印到屏幕上,但是以对开发者而不是最终用户更有用的形式。在单用户模式中,会话用户将被设置为 ID 为 1 的用户,并授予此用户隐式的超级用户权限。此用户实际上不必存在,因此可以利用单用户模式手动从系统目录的某些意外损坏中恢复。

选项

postgres 接受以下命令行参数。有关选项的详细讨论,请查阅 第 19 章。您可以通过设置配置文件来节省输入的大部分选项。一些(安全)选项还可以连接客户端中以应用程序相关的方式进行设置,仅适用于该会话。例如,如果环境变量 PGOPTIONS 已设置,则基于 libpq 的客户端将会把该字符串传递给服务器,而服务器会将其解释为 postgres 命令行选项。

通用

-B nbuffers

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

-c name=value

设置命名的运行时参数。PostgreSQL 支持的配置参数在 第 19 章 中进行说明。事实上,大多数其他命令行选项都是此类参数分配的简写形式。-c 可以多次出现以设置多个参数。

-C name

打印命名运行时参数的值,然后退出。(有关详细信息,请参见上述 -c 选项。)这将返回 postgresql.conf 中的值,这些值可能由本次调用中提供的任何参数来修改。它无法反映群集启动时提供的参数。

此选项可用于正在运行的大多数参数的服务器中。但是,服务器必须关闭才能使用部分运行时计算参数(例如 shared_memory_sizeshared_memory_size_in_huge_pageswal_segment_size)。

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

-d debug-level

设置调试级别。此值设置得越高,服务器日志中记录的调试输出就越多。值范围为 1 到 5。也可以传递 -d 0 用于特定会话,这将防止将父 postgres 进程的服务器日志级别传播到此会话。

-D datadir

指定数据库配置文件的文件系统位置。请参阅 第 19.2 节 了解详细信息。

-e

将默认日期样式设置为 European,即输入日期字段的 DMY 顺序。这也导致日期在某些日期输出格式中被打印在月份之前。有关详细信息,请参见 第 8.5 节

-F

禁用 fsync 调用以提高性能,但可能会在系统崩溃时损坏数据。指定此选项等效于禁用 fsync 配置参数。在使用此参数前,请仔细阅读详细文档!

-h hostname

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

-i

允许远程客户端通过 TCP/IP(Internet 域)连接连接。如果没有此选项,则仅接受本地连接。此选项等效于在 postgresql.conf 中将 listen_addresses 设置为 * 或通过 -h 设置。

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

-k directory

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

-l

启用使用SSL的安全连接。SSL必须已启用对SSL的支持才能使用此选项。有关使用

-N max-connections

设置此服务器将接受的最大客户端连接数。initdb 将自动选择此参数的默认值。指定此选项等同于设置 max_connections 配置参数。

-p 端口

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

-s

在每个命令的末尾打印时间信息和其他统计信息。这对基准测试或调整缓冲区数量有用。

-S 工作内存

指定在使用临时磁盘文件之前,排序和哈希表使用的基本内存量。请参见 19.4.1 节work_mem 配置参数的说明。

-V
--版本

打印 postgres 版本并退出。

--名称=

设置一个命名的运行时参数;-c 的更短形式。

--描述配置

此选项以制表符分隔的 COPY 格式转储服务器的内部配置变量、说明和默认值。其主要用于管理工具。

-?
--帮助

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

半内部选项

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

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

禁止使用特定的扫描和连接方法: si 分别禁止顺序和索引扫描, obt 分别禁止仅索引扫描、位图索引扫描和 TID 扫描,而 nmh 分别禁止嵌套循环、合并和散列连接。

顺序扫描和嵌套循环连接不能完全禁用; -fs-fn 选项只是阻止优化器在有其他备选方案的情况下使用这些计划类型。

-O

允许修改系统表的结构。 initdb 使用此选项。

-P

读取系统表时忽略系统索引,但修改表时仍更新索引。当从损坏的系统索引中恢复时,此选项非常有用。

-t pa[rser] | pl[anner] | e[xecutor]

打印与每个主要系统模块相关的每个查询的时间统计信息。此选项不能与 -s 选项同时使用。

-T

此选项用于调试导致服务器进程异常终止的问题。在这种情况下,常用策略是通过向它们发送 SIGQUIT 信号来通知所有其他服务器进程它们必须终止。通过此选项,将改为发送 SIGABRT,这将生成核心转储文件。

-v protocol

指定与特定会话一起使用的前端/后端协议的版本号。此选项仅供内部使用。

-W seconds

在下一次服务器进程启动之后,经过验证程序后,会出现 seconds 秒的延迟。这样做是为了有机会使用调试器连接到服务器进程。

单用户模式选项

以下选项仅适用于单用户模式(参见 单用户模式)。

--single

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

database

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

-E

在执行所有命令之前,将其全部回显到标准输出。

-j

使用分号后接两个换行符(而非仅换行符)作为命令输入终止符。

-r filename

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

环境

PGCLIENTENCODING

客户端使用的默认字符编码。(客户端可分别覆盖此项设置。) 此值也可以在配置文件中设置。

PGDATA

默认数据目录位置

PGDATESTYLE

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

PGPORT

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

诊断

如果看到提及 semgetshmget 的错误消息,可能表示您需要配置内核以提供足够共享内存和信号,详情请参阅 第 18.4 节。您可以通过降低 shared_buffers 来减少 PostgreSQL 的共享内存占用,或者降低 max_connections 来减少信号占用,从而推迟重新配置内核。对于

建议关注提示其他服务器已运行的错误消息,例如使用命令

$ ps ax | grep postgres

$ ps -ef | grep postgres

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

如果错误消息表示无法绑定到端口,可能表示该端口已被非 PostgreSQL 进程使用。如果终止 postgres 并立即使用相同端口重新启动它,您也可能收到此错误;在这种情况下,您只需等待几秒钟等操作系统关闭端口然后再重试即可。最后,如果您指定了一个操作系统将视为保留的端口号,您也可能收到此错误。例如,许多版本的 Unix 将 1024 以下端口号视为 受信任,仅允许 Unix 超级用户访问这些端口。

实用程序命令 pg_ctl 可用于安全、轻松地启动和关闭 postgres 服务器。

务必 不要 使用 SIGKILL 来关闭主 postgres 服务器。这样做将阻止 postgres 在终止前释放它所持有的系统资源(例如,共享内存和信号)。对于启动新的 postgres 运行,这可能会造成问题。

正常终止 postgres 服务器,可以使用 SIGTERMSIGINTSIGQUIT 信号。第一个信号将在退出前等待所有客户端终止,第二个信号将强制断开所有客户端的连接,第三个信号将在不正确关机的情况下立即退出,导致在重启期间进行恢复运行。

SIGHUP 信号将重新加载服务器配置文件。也可以将 SIGHUP 发送给单独的服务器进程,但这通常不合理。

要取消正在运行的查询,请向运行该命令的进程发送 SIGINT 信号。要正确终止后端进程,请向该进程发送 SIGTERM 信号。另请参阅 第 9.28.2 节 中的 pg_cancel_backendpg_terminate_backend 以了解这两个操作的 SQL 可调用等价项。

postgres 服务器使用 SIGQUIT 通知从属服务器进程在不进行正常清理的情况下终止。用户不应使用此信号。向服务器进程发送 SIGKILL 也是不合适的——主 postgres 进程会将其解释为崩溃,并将强制所有兄弟进程作为其标准崩溃恢复程序的一部分退出。

Bug

-- 选项在 FreeBSDOpenBSD 上不起作用。请改用 -c。这是受影响操作系统的错误;如果此错误未修复,PostgreSQL 的未来版本将提供解决方法。

单用户模式

要启动单用户模式服务器,请使用如下命令

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

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

通常,单用户模式服务器将换行符视为命令输入终止符;它不会识别分号,如 psql 所做的那样。要跨多行继续执行命令,必须在除最后一行之外的每个换行符前键入反斜杠。反斜杠和相邻的换行符都会从输入命令中删除。请注意,即使在字符串文字或注释中也会发生这种情况。

但如果你使用 -j 命令行开关,一个单独的新行不会终止命令输入;序列分号-新行-新行会终止。也就是说,立即输入分号,后接一个完全空行。反斜杠-换行符在这种模式下不会受到特殊对待。再说一遍,在字符串文字或注释中,对于此类序列并无智能分析。

在任何输入模式下,如果你输入一个分号,此分号并不会紧接着命令输入结束符之前或作为命令输入结束符的一部分,而是被视为命令分隔符。当你输入一个命令输入结束符时,已输入的多个语句将作为一个单一事务执行。

要退出会话,请输入EOF(通常是 Control+D)。如果你在上一个命令输入结束符后输入了任何文本,那么它EOF将作为命令输入结束符处理,且需要另一个EOF才能退出。

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

示例

使用默认值在后台启动 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 中编辑设置的方法可能比依靠命令行开关来设置参数更为妥当。

另请参阅

initdbpg_ctl