# postgres

postgres — PostgreSQL 数据库服务器

# 概要

postgres [选项...]

# 描述

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

postgresinstance 始终只管理一个数据库集群的数据。数据库集群是存储在公共文件系统位置(“数据区域”)的数据库集合。超过一个postgres实例可以一次在系统上运行,只要它们使用不同的数据区域和不同的通信端口(见下文)。什么时候postgres启动它需要知道数据区的位置。位置必须由-D选项或PGD​​ATA环境变量;没有默认值。通常,-D或者PGD​​ATA直接指向由创建的数据区目录初始化数据库.其他可能的文件布局在第 20.2 节.

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

postgres命令也可以在单用户模式下调用。此模式的主要用途是在引导期间初始化数据库.有时用于调试或灾难恢复;请注意,运行单用户服务器并不真正适合调试服务器,因为不会发生实际的进程间通信和锁定。当从 shell 以单用户模式调用时,用户可以输入查询并将结果打印到屏幕上,但其形式对开发人员比最终用户更有用。在单用户模式下,会话用户将设置为 ID 为 1 的用户,并授予该用户隐式超级用户权限。该用户实际上并不一定存在,因此可以使用单用户模式手动从对系统目录的某些意外损坏中恢复。

# 选项

postgres接受以下命令行参数。有关选项的详细讨论,请咨询第 20 章.您可以通过设置配置文件来节省大部分这些选项的输入。一些(安全)选项也可以从连接客户端以依赖于应用程序的方式设置为仅适用于该会话。例如,如果环境变量选项设置,然后基于 libpq 的客户端将该字符串传递给服务器,服务器会将其解释为postgres命令行选项。

# 一般用途

-B *缓冲区*

设置供服务器进程使用的共享缓冲区的数量。此参数的默认值由 initdb 自动选择。指定此选项相当于设置共享_缓冲区配置参数。

-c *姓名*=*价值*

设置一个命名的运行时参数。PostgreSQL 支持的配置参数在第 20 章.大多数其他命令行选项实际上是这种参数分配的简短形式。-c可以出现多次来设置多个参数。

-C *姓名*

打印指定运行时参数的值,然后退出。(见-c上面的选项以获取详细信息。)这可以在正在运行的服务器上使用,并从以下位置返回值postgresql.conf,由此调用中提供的任何参数修改。它不反映集群启动时提供的参数。

此选项适用于与服务器实例交互的其他程序,例如皮克_控制, 查询配置参数值。面向用户的应用程序应改为使用显示或者pg_settings看法。

-d *调试级*

设置调试级别。该值设置得越高,写入服务器日志的调试输出就越多。值从1到5.也有可能通过考试-d 0对于特定会话,这将阻止父会话的服务器日志级别博士后进程无法传播到此会话。

-D*数据目录*

指定数据库配置文件的文件系统位置。看见第20.2节详细信息。

-e

将默认日期样式设置为“European”,即DMY输入日期字段的排序。这也会导致以特定的日期输出格式打印月份之前的日期。看见第8.5节了解更多信息。

-F

禁用同步要求提高性能,在系统崩溃时冒着数据损坏的风险。指定此选项相当于禁用同步配置参数。使用前请阅读详细文档!

-h*主机名*

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

-我

允许远程客户端通过TCP/IP(Internet域)连接进行连接。如果没有此选项,则只接受本地连接。此选项相当于设置听一下你的地址*在里面postgresql。形态或者通过-h.

此选项已被弃用,因为它不允许访问的全部功能听_地址1.通常最好是听一下你的地址直接地

-k*目录*

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

-l

使用SSL启用安全连接。PostgreSQL必须在编译时支持SSL,才能使用此选项。有关使用SSL的更多信息,请参阅第19.9节.

-N*最大连接数*

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

-p*港口城市*

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

-s

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

-S 工作记忆

指定排序和哈希表在使用临时磁盘文件之前要使用的基本内存量。请参见对工作记忆中的配置参数第20.4.1节.

-五
--版本

打印postgres版本并退出。

--*名称*=*价值*

设置命名的运行时参数;较短形式的-c.

--描述配置

此选项将服务器的内部配置变量、描述和默认值转储为以制表符分隔的格式复制总体安排它主要用于管理工具。

-?
--救命

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

# 半内部期权

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

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

禁止使用特定的扫描和连接方法:s分别禁用顺序扫描和索引扫描,o, bt分别禁用仅索引扫描、位图索引扫描和TID扫描,而n, mh分别禁用嵌套循环、合并和哈希连接。

顺序扫描和嵌套循环联接都不能完全禁用;这个-财政司司长-fn选项只是阻止优化器在有其他选择的情况下使用这些计划类型。

-n

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

-O

允许修改系统表的结构。这是由initdb.

-P

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

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

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

-T

此选项用于调试导致服务器进程异常死亡的问题。这种情况下的一般策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和信号量。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定博士后将通过发送信号停止所有其他服务器进程SIGSTOP,但不会导致其终止。这允许系统程序员手动从所有服务器进程收集内核转储。

-五 协议

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

-W

在新服务器进程执行身份验证过程后,启动新服务器进程时会出现这几秒钟的延迟。这是为了提供一个使用调试器连接到服务器进程的机会。

# 单用户模式的选项

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

--单身

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

数据库

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

-E

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

-j

使用分号后跟两个换行符(而不仅仅是换行符)作为命令项终止符。

-r 文件名

将所有服务器日志输出发送到*文件名*。此选项仅在作为命令行选项提供时有效。

# 环境

PG客户编码

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

PGDATA

默认数据目录位置

日期样式

默认值日期风格运行时参数。(不推荐使用此环境变量。)

PGPORT

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

# 诊断学

失败消息塞姆杰共享存储区可能表示需要配置内核以提供足够的共享内存和信号量。有关更多讨论,请参阅第19.4节.您可以通过减少共享_缓冲区减少PostgreSQL的共享内存消耗,和/或通过减少最大值_连接以减少信号量消耗。

应仔细检查提示另一台服务器已在运行的故障消息,例如使用命令

$ ps ax | grep postgres

$ ps -ef | grep postgres

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

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

# 笔记

实用程序命令pg_ctl可用于启动和关闭博士后服务器安全舒适。

如果可能的话,不要使用西格基尔杀死主要的博士后服务器这样做将防止博士后在终止之前释放系统资源(例如,共享内存和信号量)。这可能会给重新开始工作带来问题博士后

终止博士后正常情况下,信号西格特姆, 信号西格奎特可以使用。第一个将等待所有客户端在退出之前终止,第二个将强制断开所有客户端的连接,第三个将在未正确关闭的情况下立即退出,从而在重新启动期间恢复运行。

这个叹气信号将重新加载服务器配置文件。也可以发送叹气但这通常是不明智的。

要取消正在运行的查询,请发送信号向运行该命令的进程发送信号。要干净地终止后端进程,请发送西格特姆这一过程。另见pg_取消后端pg_终止_后端在里面第9.27.2节这两个操作的SQL可调用等价物。

这个博士后服务器使用西格奎特通知下级服务器进程在不进行正常清理的情况下终止。这个信号不应该供用户使用。发送电子邮件也是不明智的西格基尔到服务器进程-主进程博士后进程将把这解释为崩溃,并将强制所有同级进程退出,作为其标准崩溃恢复过程的一部分。

# 漏洞

这个--选项在FreeBSD或OpenBSD上不起作用。使用-c相反这是受影响的操作系统中的一个缺陷;如果这个问题没有得到解决,PostgreSQL的未来版本将提供一个解决方案。

# 单用户模式

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

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

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

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

但是如果你使用-j命令行开关,单个换行符不终止命令输入;相反,序列分号newline newline确实如此。也就是说,键入一个分号,后跟一个完全空行。在这种模式下,反斜杠换行符不是特别处理的。同样,对于出现在字符串文本或注释中的这样一个序列,也没有任何智能。

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

要退出会话,请键入EOF(控制+D通常是)。如果在上一个命令输入终止符之后输入了任何文本,那么EOF将被视为命令输入终止符,需要另一个EOF才能退出。

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

# 例子

开始博士后在后台使用默认值键入:

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

开始博士后使用特定端口,例如1234:

$ postgres -p 1234

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

$ psql -p 1234

或者设置环境变量PGPORT:

$ export PGPORT=1234
$ psql

命名运行时参数可以使用以下任一样式设置:

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

任何一个表单都会覆盖其可能存在的任何设置工作记忆在里面postgresql。形态。请注意,参数名称中的下划线可以在命令行中写为下划线或破折号。除了短期实验之外,最好的做法可能是在postgresql。形态而不是依靠命令行开关来设置参数。

# 另见

initdb, pg_ctl