## postgres postgres — PostgreSQL 数据库服务器 ## 概要 `postgres` [*`选项`*...] ## 描述 `postgres`是 PostgreSQL 数据库服务器。为了让客户端应用程序访问数据库,它连接(通过网络或本地)到正在运行的`postgres`实例。这`postgres`然后实例启动一个单独的服务器进程来处理连接。 一`postgres`instance 始终只管理一个数据库集群的数据。数据库集群是存储在公共文件系统位置(“数据区域”)的数据库集合。超过一个`postgres`实例可以一次在系统上运行,只要它们使用不同的数据区域和不同的通信端口(见下文)。什么时候`postgres`启动它需要知道数据区的位置。位置必须由`-D`选项或`PGD​​ATA`环境变量;没有默认值。通常,`-D`或者`PGD​​ATA`直接指向由创建的数据区目录[初始化数据库](app-initdb.html).其他可能的文件布局在[第 20.2 节](runtime-config-file-locations.html). 默认情况下`postgres`从前台开始并将日志消息打印到标准错误流。在实际应用中`postgres`应该作为后台进程启动,可能在启动时启动。 这`postgres`命令也可以在单用户模式下调用。此模式的主要用途是在引导期间[初始化数据库](app-initdb.html).有时用于调试或灾难恢复;请注意,运行单用户服务器并不真正适合调试服务器,因为不会发生实际的进程间通信和锁定。当从 shell 以单用户模式调用时,用户可以输入查询并将结果打印到屏幕上,但其形式对开发人员比最终用户更有用。在单用户模式下,会话用户将设置为 ID 为 1 的用户,并授予该用户隐式超级用户权限。该用户实际上并不一定存在,因此可以使用单用户模式手动从对系统目录的某些意外损坏中恢复。 ## 选项 `postgres`接受以下命令行参数。有关选项的详细讨论,请咨询[第 20 章](runtime-config.html).您可以通过设置配置文件来节省大部分这些选项的输入。一些(安全)选项也可以从连接客户端以依赖于应用程序的方式设置为仅适用于该会话。例如,如果环境变量`选项`设置,然后基于 libpq 的客户端将该字符串传递给服务器,服务器会将其解释为`postgres`命令行选项。 ### 一般用途 `-B *`缓冲区`*` 设置供服务器进程使用的共享缓冲区的数量。此参数的默认值由 initdb 自动选择。指定此选项相当于设置[共享\_缓冲区](runtime-config-resource.html#GUC-SHARED-BUFFERS)配置参数。 `-c *`姓名`*=*`价值`*` 设置一个命名的运行时参数。PostgreSQL 支持的配置参数在[第 20 章](runtime-config.html).大多数其他命令行选项实际上是这种参数分配的简短形式。`-c`可以出现多次来设置多个参数。 `-C *`姓名`*` 打印指定运行时参数的值,然后退出。(见`-c`上面的选项以获取详细信息。)这可以在正在运行的服务器上使用,并从以下位置返回值`postgresql.conf`,由此调用中提供的任何参数修改。它不反映集群启动时提供的参数。 此选项适用于与服务器实例交互的其他程序,例如[皮克\_控制](app-pg-ctl.html), 查询配置参数值。面向用户的应用程序应改为使用[`显示`](sql-show.html)或者`pg_settings`看法。 `-d *`调试级`*` 设置调试级别。该值设置得越高,写入服务器日志的调试输出就越多。值从1到5.也有可能通过考试`-d 0`对于特定会话,这将阻止父会话的服务器日志级别`博士后`进程无法传播到此会话。 `-D*`数据目录`*` 指定数据库配置文件的文件系统位置。看见[第20.2节](runtime-config-file-locations.html)详细信息。 `-e` 将默认日期样式设置为“European”,即`DMY`输入日期字段的排序。这也会导致以特定的日期输出格式打印月份之前的日期。看见[第8.5节](datatype-datetime.html)了解更多信息。 `-F` 禁用`同步`要求提高性能,在系统崩溃时冒着数据损坏的风险。指定此选项相当于禁用[同步](runtime-config-wal.html#GUC-FSYNC)配置参数。使用前请阅读详细文档! `-h*`主机名`*` 指定其上的IP主机名或地址`博士后`监听来自客户端应用程序的TCP/IP连接。该值也可以是以逗号分隔的地址列表,或`*`指定监听所有可用接口。空值指定不监听任何IP地址,在这种情况下,只能使用Unix域套接字连接到服务器。默认为仅在本地主机上侦听。指定此选项相当于设置[听\_地址](runtime-config-connection.html#GUC-LISTEN-ADDRESSES)配置参数。 `-我` 允许远程客户端通过TCP/IP(Internet域)连接进行连接。如果没有此选项,则只接受本地连接。此选项相当于设置`听一下你的地址`到`*`在里面`postgresql。形态`或者通过`-h`. 此选项已被弃用,因为它不允许访问的全部功能[听\_地址](runtime-config-connection.html#GUC-LISTEN-ADDRESSES)1.通常最好是`听一下你的地址`直接地 `-k*`目录`*` 指定其上的Unix域套接字的目录`博士后`监听来自客户端应用程序的连接。该值也可以是以逗号分隔的目录列表。空值指定不侦听任何Unix域套接字,在这种情况下,只能使用TCP/IP套接字连接到服务器。默认值通常为`/tmp`,但这可以在构建时更改。指定此选项相当于设置[unix\_插座\_目录](runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORIES)配置参数。 `-l` 使用SSL启用安全连接。PostgreSQL必须在编译时支持SSL,才能使用此选项。有关使用SSL的更多信息,请参阅[第19.9节](ssl-tcp.html). `-N*`最大连接数`*` 设置此服务器将接受的最大客户端连接数。此参数的默认值由initdb自动选择。指定此选项相当于设置[最大值\_连接](runtime-config-connection.html#GUC-MAX-CONNECTIONS)配置参数。 `-p*`港口城市`*` 指定其上的TCP/IP端口或本地Unix域套接字文件扩展名`博士后`监听来自客户端应用程序的连接。默认值为`PGPORT`环境变量,或者`PGPORT`则默认为编译期间建立的值(通常为5432)。如果指定的端口不是默认端口,则所有客户端应用程序都必须使用命令行选项或`PGPORT`. `-s` 在每个命令结束时打印时间信息和其他统计信息。这对于基准测试或调整缓冲区数量非常有用。 `-S` *`工作记忆`* 指定排序和哈希表在使用临时磁盘文件之前要使用的基本内存量。请参见对`工作记忆`中的配置参数[第20.4.1节](runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY). `-五`\ `--版本` 打印postgres版本并退出。 `--*`名称`*=*`价值`*` 设置命名的运行时参数;较短形式的`-c`. `--描述配置` 此选项将服务器的内部配置变量、描述和默认值转储为以制表符分隔的格式`复制`总体安排它主要用于管理工具。 `-?`\ `--救命` 显示有关postgres命令行参数的帮助,然后退出。 ### 半内部期权 这里描述的选项主要用于调试目的,在某些情况下还用于帮助恢复严重损坏的数据库。没有理由在生产数据库设置中使用它们。此处列出的代码仅供PostgreSQL系统开发人员使用。此外,这些选项可能会在未来的版本中更改或删除,恕不另行通知。 `-f` `{s|i|o|b|t|n|m|h}` 禁止使用特定的扫描和连接方法:`s`和`我`分别禁用顺序扫描和索引扫描,`o`, `b`和`t`分别禁用仅索引扫描、位图索引扫描和TID扫描,而`n`, `m`和`h`分别禁用嵌套循环、合并和哈希连接。 顺序扫描和嵌套循环联接都不能完全禁用;这个`-财政司司长`和`-fn`选项只是阻止优化器在有其他选择的情况下使用这些计划类型。 `-n` 此选项用于调试导致服务器进程异常死亡的问题。这种情况下的一般策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和信号量。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定`博士后`不会重新初始化共享数据结构。然后,知识渊博的系统程序员可以使用调试器检查共享内存和信号量状态。 `-O` 允许修改系统表的结构。这是由`initdb`. `-P` 在读取系统表时忽略系统索引,但在修改表时仍会更新索引。这在从损坏的系统索引中恢复时非常有用。 `-t` `pa[rser]| pl[anner]| e[xecutor]` 打印与每个主要系统模块相关的每个查询的计时统计信息。此选项不能与`-s`选项 `-T` 此选项用于调试导致服务器进程异常死亡的问题。这种情况下的一般策略是通知所有其他服务器进程它们必须终止,然后重新初始化共享内存和信号量。这是因为错误的服务器进程可能在终止之前破坏了某些共享状态。此选项指定`博士后`将通过发送信号停止所有其他服务器进程`SIGSTOP`,但不会导致其终止。这允许系统程序员手动从所有服务器进程收集内核转储。 `-五` *`协议`* 指定用于特定会话的前端/后端协议的版本号。此选项仅供内部使用。 `-W` *`秒`* 在新服务器进程执行身份验证过程后,启动新服务器进程时会出现这几秒钟的延迟。这是为了提供一个使用调试器连接到服务器进程的机会。 ### 单用户模式的选项 [](<>) 以下选项仅适用于单用户模式(请参阅[单用户模式](app-postgres.html#APP-POSTGRES-SINGLE-USER)下面)。 `--单身` 选择单用户模式。这必须是命令行上的第一个参数。 *`数据库`* 指定要访问的数据库的名称。这必须是命令行上的最后一个参数。如果省略,则默认为用户名。 `-E` 在执行之前,将所有命令回显到标准输出。 `-j` 使用分号后跟两个换行符(而不仅仅是换行符)作为命令项终止符。 `-r` *`文件名`* 将所有服务器日志输出发送到*`文件名`*。此选项仅在作为命令行选项提供时有效。 ## 环境 `PG客户编码` 客户端使用的默认字符编码。(客户端可以单独覆盖此选项。)该值也可以在配置文件中设置。 `PGDATA` 默认数据目录位置 `日期样式` 默认值[日期风格](runtime-config-client.html#GUC-DATESTYLE)运行时参数。(不推荐使用此环境变量。) `PGPORT` 默认端口号(最好在配置文件中设置) ## 诊断学 失败消息`塞姆杰`或`共享存储区`可能表示需要配置内核以提供足够的共享内存和信号量。有关更多讨论,请参阅[第19.4节](kernel-resources.html).您可以通过减少[共享\_缓冲区](runtime-config-resource.html#GUC-SHARED-BUFFERS)减少PostgreSQL的共享内存消耗,和/或通过减少[最大值\_连接](runtime-config-connection.html#GUC-MAX-CONNECTIONS)以减少信号量消耗。 应仔细检查提示另一台服务器已在运行的故障消息,例如使用命令 ``` $ ps ax | grep postgres ``` 或 ``` $ ps -ef | grep postgres ``` 取决于你的系统。如果确定没有冲突服务器正在运行,可以删除消息中提到的锁定文件,然后重试。 指示无法绑定到端口的失败消息可能表示该端口已被某些非PostgreSQL进程使用。如果终止,也可能会出现此错误`博士后`并立即使用同一端口重新启动;在这种情况下,您只需等待几秒钟,直到操作系统关闭端口,然后重试。最后,如果指定操作系统认为保留的端口号,可能会出现此错误。例如,许多版本的UNIX认为1024以下的端口号是“可信的”,并且只允许UNIX超级用户访问它们。 ## 笔记 实用程序命令[pg_ctl](app-pg-ctl.html)可用于启动和关闭`博士后`服务器安全舒适。 如果可能的话,*不要*使用`西格基尔`杀死主要的`博士后`服务器这样做将防止`博士后`在终止之前释放系统资源(例如,共享内存和信号量)。这可能会给重新开始工作带来问题`博士后`跑 终止`博士后`正常情况下,信号`西格特姆`, `信号`或`西格奎特`可以使用。第一个将等待所有客户端在退出之前终止,第二个将强制断开所有客户端的连接,第三个将在未正确关闭的情况下立即退出,从而在重新启动期间恢复运行。 这个`叹气`信号将重新加载服务器配置文件。也可以发送`叹气`但这通常是不明智的。 要取消正在运行的查询,请发送`信号`向运行该命令的进程发送信号。要干净地终止后端进程,请发送`西格特姆`这一过程。另见`pg_取消后端`和`pg_终止_后端`在里面[第9.27.2节](functions-admin.html#FUNCTIONS-ADMIN-SIGNAL)这两个操作的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