postgres

Name

postgres -- 以单用户模式运行一个 PostgreSQL服务器

Synopsis

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 work-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 work-mem] [-v protocol] [-W seconds] [--name=value]

描述

可执行程序 postgres 是真正处理查询的 PostgreSQL 服务器进程。 通常它是不会被直接调用的;而是启动一个 postmaster 多用户服务器。

上面的第二种形式就是 postmaster调用 postgres 的方法(只是概念上的,因为 postmasterpostgres 实际上是一样的程序); 我们不能这样直接调用它。第一种形式以交互单用户模式直接调用该服务器。 这种用法的主要用途是在 initdb 做初始化时用。有时候它被用做调试灾难性恢复。

当从 shell 上以交互模式调用时,用户可以输入查询并且结果会打印在屏幕上, 不过格式对开发人员更有用,对用户却差好多。 不过请记住,运行一个单用户服务器并不适合于调试该服务器, 因为没有实际的进程间通讯和锁动作发生。

当运行一个单用户服务器时,将把会话用户设置为 ID 为 1 的用户。 该用户不必实际存在,因此一个独立运行的服务器可以用于对某些意外损坏的系统表中进行手工恢复。 在独立运行模式下,系统隐含地赋予 ID 为 1 的用户超级用户权限。

选项

如果 postgres 是由一个 postmaster 启动的,那么它继承后者的所有选项集。另外 postgres 相关的选项可以用 -o 开关从 postmaster 传递。

你可以通过设置一个配置文件来避免键入这些选项。 参阅Section 16.4获取细节。 有些(安全的)选项还可以从联接过来的客户端设置, 这样就获得了一种应用无关的方法。 比如,如果设置了 PGOPTIONS 环境变量, 那么基于libpq的客户端就都把那个字串传递给服务器, 会解释成 postgres 命令行选项。

通用用途

选项 -A-B-c-d-D, 和 -F,以及--namepostmaster 里的有相同的含义。只是 -d 0 避免 postmaster 的调试级别传播到 postgres

-e

把缺省日期风格设置为 "European",也就是说用"DMY"规则解释日期输入, 并且在一些日期输出格式里日子在月份前面打印。 参阅 Section 8.5 获取更多细节。

-o filename

把所有服务器日志输出到 filename。 如果服务器是由 postmaster运行的, 则忽略这个选项,并且使用从 postmaster 继承过来的stderr

-P

扫描/更新系统记录时忽略系统表。对系统表/索引使用 REINDEX 时需要这个选项。

-s

在每条命令结束时打印时间信息和其他统计信息。 这个开关对测试性能和调节缓冲区数量有好处。

-Swork-mem

声明内部排序和散列在求助于临时磁盘文件之前可以使用的内存数量。 参阅 Section 16.4.3.1 里描述的配置变量 work_mem

单用户模式的选项

database

声明要访问的数据库的名字。如果忽略掉则缺省为用户名。

-E

回显所有命令。

-N

关闭把新行作为语句分隔符。

半内部选项

还有几个其他的选项可以声明,主要用于调试用途。 这些东西在这里列出只是给 PostgreSQL 系统开发人员使用的。 我们强烈反对使用这些选项。 另外这些选项的任何一项都可能在未来版本中消失而不加说明。

-f{ s | i | m | n | h }

禁止某种扫描和连接方法的使用: si 分别关闭顺序和索引扫描,而 nm,和 h 分别关闭嵌套循环,融合(merge)和散列连接。

注意: 顺序扫描和嵌套循环都不可能完全被关闭。 -fs-fn 选项仅仅是在存在其他方法时阻 碍优化器使用这些方法罢了。

-O

允许修改系统表的结构。这个参数用于 initdb

-pdatabase

告诉服务器服务器它是由一个 postmaster 启动的并声明要使用的数据库等。

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

打印与每个主要系统模块相关的查询记时统计。 它不能和 -s选项一块使用。

-vprotocol

声明这次会话使用的前/服务器协议的版本数。

-Wseconds

一旦看见这个选项,进程就睡眠标出的秒数。 这样就给开发者一些时间把调试器附着在该服务器进程上。

--describe-config

这个选项以 tab 分隔的 COPY 格式,倒出服务器内部配置变量,描述和缺省之。 设计它主要是给管理工具使用。

环境

PGDATA

缺省数据目录位置

对于其它的在单用户模式里有一点点影响的环境变量,请参阅 postmaster

注意

要停止运行一个查询,使用 SIGINT 给正在运行该命令的 postgres 进程发信号。

要告诉 postgres 重新读取配置文件, 使用一个 SIGHUP 信号。 通常我们最好给 postmaster 发送 SIGHUPpostmaster 将随后 SIGHUP 他的每个子进程。 但是有时候我们可能想只让一个 postgres 进程重装载配置文件。

postmaster 使用 SIGTERM 告诉postgres进程正常退出, 而 SIGQUIT 是不经过正常清理的退出。 这些信号不应该由用户使用。 给一个 postgres 进程发送 SIGKILL 也是不明智的 — postmaster 将把这个信号解释成一次在 postgres 里的崩溃, 并且会强制所有他的子 postgres 进程像在一个标准的崩溃-恢复过程里一样退出。

用法

用下面这样的命令启动一个独立的服务器

postgres -D $PGDATA other-options my_database

-D 给服务器提供正确的数据库目录的路径, 或者确保环境变量 PGDATA 已经正确设置。 同时还要声名你象用的特定数据库名字。

通常,独立运行的服务器把换行符当做命令输入完成字符; 它还不懂分号的作用,因为那些东西是在 psql 里的。 要想把一行分成多行写,你必需在除最后一个换行符以外的每个换行符前面敲一个反斜杠。

但是如果你使用 -N 命令行开关,那么换行符就不会中止命令输入。 服务器将从标准输入读取数据,直到碰到文件结尾(EOF), 然后把输入当做一个单个的命令字串处理。这个时候反斜杠-换行符就不再当做特殊情况处理。

要退出会话,键入EOF通常是 Control+D)。 如果你已经使用了 -N,需要用两个连续的EOF来退出。

请注意独立运行的服务器不会提供复杂的行编辑功能(比如,没有命令行历史)。

又见

initdb, ipcclean, postmaster