postgres
postgres — 以单用户模式运行一个PostgreSQL服务器
大纲
postgres [-A [0] | [1] ] [-B nbuffers] [-c name=value] [-d debug-level] [--describe-config] [-D datadir] [-e] [-E] [-f [s] | [i] | [t] | [n] | [m] | [h] ] [-F] [-N] [-o filename] [-O] [-P] [[-s] | [-t [pa] | [pl] | [ex] ]] [-S sort-mem] [-W seconds] [--name=value] database postgres [-A [0] | [1] ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-e] [-f [s] | [i] | [t] | [n] | [m] | [h] ] [-F] [-o filename] [-O] [-p database] [-P] [[-s] | [-t [pa] | [pl] | [ex] ]] [-S sort-mem] [-v protocol] [-W seconds] [--name=value]
描述
postgres可执行文件是真正处理查询的
PostgreSQL服务器进程。通常不会直接调用它,而是启动一个postmaster多用户服务器。
上面的第二种形式是
postgres被postmaster调用的形式(这只是概念上的,因为postmaster和
postgres实际上是同一个程序);不应直接以这种方式调用它。第一种形式以交互式单用户模式直接调用服务器。这种模式的主要用途是在initdb执行引导期间使用。有时也会用它来调试或进行灾难恢复。
从 shell 以交互模式调用时,用户可以输入查询,结果会打印到屏幕上,但其形式对开发者更有用,而非面向终端用户。但请注意,运行单用户服务器其实并不适合调试服务器,因为不会发生真实的进程间通信和锁定。
运行独立服务器时,会话用户会被设置为 ID 为 1 的用户。该用户实际上不必存在,因此独立服务器可用于手工恢复系统目录遭受某些意外损坏的情况。在独立模式下,会向 ID 为 1 的用户隐式授予超级用户权限。
选项
当postgres由postmaster启动时,它继承后者设置的所有选项。此外,可以通过
postmaster的
-o开关传递postgres特有的选项。
通过设置配置文件,你可以避免键入这些选项。详见第 16.4 节。某些(安全的)选项还可以由连接的客户端以应用相关的方式设置。例如,如果设置了环境变量PGOPTIONS,那么基于libpq的客户端就会将该字符串传给服务器,服务器会将其解释为
postgres命令行选项。
通用选项
选项-A、-B、-c、-d、-D、-F和--的含义与postmaster中的相同,只是
name-d 0会阻止postmaster的服务器日志级别传播到postgres。
-e将默认日期风格设置为“European”,即输入日期字段采用
DMY顺序。这也会在某些日期输出格式中使日期显示为日在月前。更多信息见第 8.5 节。-ofilename将所有服务器日志输出发送到
filename。如果postgres运行在postmaster之下,该选项会被忽略,并使用从postmaster继承的stderr。-P读取系统表时忽略系统索引,但在修改表时仍然更新这些索引。这在从损坏的系统索引中恢复时很有用。
-s在每条命令结束时打印时间信息和其他统计信息。这对基准测试或者调整缓冲区数量很有用。
-Ssort-mem指定内部排序和哈希在求助于临时磁盘文件之前可使用的内存量。取值以千字节为单位指定,默认为 1024。注意,对于一个复杂查询,可能有多个排序和/或哈希并行运行,每一个在被允许开始把数据放入临时文件之前,都可以使用多达
sort-mem千字节。
独立模式的选项
database指定要访问的数据库名称。如果省略,则默认为用户名。
-E回显所有命令。
-N禁用换行符作为语句分隔符。
半内部选项
还有一些其他选项,主要供调试之用。这里列出这些选项,仅供PostgreSQL 系统开发者使用。强烈不建议使用这些选项中的任何一个。此外,这些选项中的任何一个都可能在未来的版本中不经通知而消失或改变。
-f{ s | i | m | n | h }禁止使用特定的扫描和连接方法:
s和i分别禁用顺序扫描和索引扫描,而n、m和h分别禁用嵌套循环、归并和哈希连接。注意
顺序扫描和嵌套循环连接都无法被完全禁用;
-fs和-fn选项只是在优化器有其他选择时,尽量不使用这些计划类型。-O允许修改系统表的结构。该选项由
initdb使用。-pdatabase指示该进程是由
postmaster启动的,并指定要使用的数据库等。-tpa[rser] | pl[anner] | e[xecutor]打印与各个主要系统模块相关的每个查询的时间统计信息。该选项不能与
-s选项一起使用。-vprotocol指定该特定会话要使用的前端/后端协议版本号。
-Wseconds一旦遇到该选项,进程就会休眠指定的秒数。这为开发者把调试器附着到服务器进程提供了时间。
--describe-config该选项会以制表符分隔的
COPY格式导出服务器内部配置变量、说明以及默认值。它主要是为管理工具设计的。
注意
要取消一个正在运行的查询,可向运行该命令的postgres进程发送 SIGINT 信号。
要告诉postgres重新加载配置文件,可发送SIGHUP信号。通常最好向
postmaster发送SIGHUP;postmaster会继而向它的每个子进程发送SIGHUP。但在某些情况下,可能只需要一个
postgres进程重新加载配置文件。
postmaster 用
SIGTERM
通知 postgres
进程正常退出,用
SIGQUIT
终止而不做正常清理。用户不应使用这些信号。向
postgres
进程发送 SIGKILL
也是不明智的——postmaster
会把这解释为 postgres
发生了崩溃,并会按照其标准的崩溃恢复过程,强制所有兄弟
postgres 进程退出。
用法
用类似下面的命令启动一个独立服务器:
postgres -D /usr/local/pgsql/data other-options my_database
使用-D提供正确的数据库目录路径,或者确保已经设置了环境变量PGDATA。还要指定你想要操作的那个数据库的名称。
通常,独立服务器将换行视为命令输入终止符;它不像psql那样会对分号进行智能处理。要让一个命令跨越多行,必须在除最后一个换行之外的每个换行前输入反斜线。
但是,如果你使用-N命令行开关,换行并不会终止命令输入。在这种情况下,服务器会读取标准输入直到文件末尾(EOF)标记,然后把输入作为单个命令字符串处理。在这种情况下,反斜线-换行不会被特殊处理。
要退出会话,输入EOF(通常是Control+D)。如果你使用了-N,则需要连续输入两次EOF才能退出。
注意,独立服务器不提供复杂的行编辑功能(例如没有命令历史)。