9.1参考3

From PostgreSQL wiki
Jump to navigationJump to search

参考3 服务器应用

这部分包括 PostgreSQL 服务器应用和支持工具的参考信息。这些命令只能用于在数据库服务器所在的主机上运行。其它工具程序在 Reference II,客户端应用 中列出。

initdb

Name

initdb -- 创建一个新的 PostgreSQL数据库集群

Synopsis

initdb [option...] --pgdata | -D directory

Description

initdb 创建一个新的 PostgreSQL 数据库集群。 一个数据库集群是由单个服务器实例管理的数据库集合。

创建数据库集群包括创建数据库数据的宿主目录,生成共享的系统表(不属于任何特定数据库的表)和创建 template1 和 postgres 数据库。当你以后再创建一个新数据库时, template1 数据库里所有内容都会拷贝过来。(因此,任何在 template1 里面安装的东西都自动拷贝到之后创建的数据库中。) postgres 数据库是一个缺省数据库,用于给用户、工具或者第三方应用提供缺省数据库。

尽管initdb会尝试创建相应的数据目录, 但经常会发生它没有权限做这些事情的情况。因为所需要的目录的父目录通常是 root 所有的目录。 要初始化这种设置,用 root 创建一个空数据目录, 然后用 chown 把该目录的所有权交给数据库用户帐号, 然后 su 成数据库用户,最后以数据库用户身份运行 initdb。

initdb 必须以服务器进程所有者身份运行,因为服务器需要initdb所创建文件和目录的访问权限。因为服务器不能以root身份运行,你也不能以root身份运行initdb。(事实上会被拒绝。)

initdb 初始化该数据库集群的缺省区域和字符集编码。字符编码排序(LC_COLLATE)和字符集表(LC_CTYPE, 也就是,大写,小写,数字等)可在数据库创建时单独设置。initdb 决定 template1 数据库的编码,而该编码将成为所有其它数据库的缺省。

要修改缺省编码排序或者字符集表,使用--lc-collate和--lc-ctype选项。使用 C 或 POSIX 之外的字符编码排序还会有性能影响。因此在运行initdb时选取正确的设置非常重要。

其余的设置可以在服务器启动后改变。也可以使用--locale设置缺省值,包括编码排序和字符集表。服务器的设置可通过SHOW ALL显示。更多细节可以参考Section 22.1。

若要改变缺省编码,使用--encoding。更多细节可以参考Section 22.3。

Options

-A authmethod --auth=authmethod

这个选项声明本地用户在 pg_hba.conf 里面使用的认证方法。 除非你相信所有你的系统上的本地用户,否则不要使用 trust。 Trust 是所有安装的缺省。

-D directory --pgdata=directory

这个选项声明数据库集群应该存放在哪个目录。 这是initdb需要的唯一信息,但是你可以通过设置 PGDATA 环境变量来避免键入, 这样做可能方便一些,因为稍后数据库服务器(postmaster)可以通过同一个变量找到数据库目录。

-E encoding --encoding=encoding

选择模板数据库的编码方式。这将是你以后创建的数据库的缺省编码方式, 除非你创建数据库时覆盖了它。缺省是从区域设置中获得的,如果没有区域设置,就是 SQL_ASCII。 PostgreSQL 服务器支持的字符集在 Section 22.3.1 里描述。

--locale=locale

为数据库集群设置缺省的区域。如果没有声明这个选项,那么区域 是从 initdb 运行的环境中继承过来的。 区域设置在 Section 22.1 里描述。

--lc-collate=locale --lc-ctype=locale --lc-messages=locale --lc-monetary=locale --lc-numeric=locale --lc-time=locale

类似 --locale,但是只设置特殊范畴的区域。

--no-locale

等价于--locale=C。

--pwfile=filename

使initdb从文件中读取超级用户的密码。密码位于该文件中第一行。

--text-search-config=CFG

设置缺省文本搜索。参看default_text_search_config获得更多信息。

-U username --username=username

选择数据库超级用户的用户名。缺省是运行 initdb 的用户的有效用户。 超级用户的名字是什么并不重要, 但是我们可以选择习惯的名字 postgres,即使操作系统的用户名字不一样也无所谓。

-W --pwprompt

令 initdb 提示输入数据库超级用户的口令。 如果你不准备使用口令认证,这个东西并不重要。 否则你将不能使用口令认证直到你设置了口令。

-X directory --xlogdir=directory

该选项指定事务日志存放的路径。

其他的,不常用的参数同样可用:

-d --debug

从初始化后端打印调试输出以及一些其它的一些普通用户不太感兴趣的信息。 初始化后端是 initdb 用于创建系统表的程序。 这个选项生成大量非常烦人的输出。

-L directory

告诉 initdb 到哪里找初始化数据库所需要的输入文件。 通常是不必要的。如果需要你明确声明的话,程序会提示你输入。

-n --noclean

缺省时,当initdb 发现一些错误妨碍它完成创建数据库集群的工作时, 它将在检测到不能结束工作之前将其创建的所有文件删除。 这个选项禁止任何清理动作,因而对调试很有用。

-V --version

打印initdb版本后退出。

-? --help

显示initdb命令行参数的帮助信息后退出。

Environment

PGDATA

声明数据库集群存储的目录;可以用 -D 选项覆盖。

这个工具,和其他PostgreSQL工具一样都使用libpq支持的环境变量(参照Section31.13)。

Notes

initdb 也可以被pg_ctl initdb调用。

See Also

pg_ctl, postgres

pg_controldata

Name

pg_controldata -- 显示PostgreSQL数据库集群的控制信息

Synopsis

pg_controldata [option] [datadir]

Description

pg_controldata 打印initdb初始化过的信息,比如系统表的版本。它也可以显示预写日志和检查点处理的信息。这个信息是集群层面的,不针对任何特定的数据库。

该工具仅可以被初始化该集群的用户执行,因为它需要对数据库数据目录的访问权限。你可以通过命令行指定数据目录也可以通过设置环境变量 PGDATA。该工具还支持-V和--version选项,该选项打印pg_controldata版本并退出。它还支持选项-?和--help,输出命令行帮助信息。

Environment

PGDATA

缺省数据目录

pg_ctl

Name

pg_ctl -- 初始化、启动、停止和重起 PostgreSQL

Synopsis

pg_ctl init[db] [-s] [-D datadir] [-o initdb-options]
pg_ctl start [-w] [-t seconds] [-s] [-D datadir] [-l filename] [-o options] [-p path] [-c]
pg_ctl stop [-W] [-t seconds] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-t seconds] [-s] [-D datadir] [-c] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl promote [-s] [-D datadir]
pg_ctl kill signal_name process_id
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a[uto] | d[emand] ] [-w] [-t seconds] [-s] [-o options]
pg_ctl unregister [-N servicename]

Description

pg_ctl 是一个用于初始化,启动,停止, 或者重起 PostgreSQL 后端服务器(postgres), 或者显示一个运行着的服务器的状态的工具, 尽管我们可以手动启动服务器,但是 pg_ctl 封装了重新定向日志输出,与终端和进程组合理分离,以及另外提供了方便的选项用于有控制的关闭。

在Init或initdb模式下创建一个新的PostgreSQL数据库集群。一个数据库集群是由一个服务进程管理的多个数据库集合。该模式调用initdb命令。详情请参考initdb。

在 start 模式里会启动一个新的服务器。服务器是在后台启动的,标准输入被附着到了 /dev/null(在Windows下是nul) 上。在类UNIX系统中,缺省情况下服务器的标准输出和标准错误输出都被发送到pg_ctl's的标准输出(不是标准错误)。pg_ctl的标准输出被重定向到一个文件或者通过管理输送给另一个进行,比如日志处理程序rotatelogs。否则postgres将把它的输出写到控制终端(从后台)并且不会脱离shell进程组。在Windows中,缺省情况下服务器的标准输出和标准错误被发送到终端。这些缺省行为可以通过-l选项来指定log重定向到某个文件。推荐使用-l或者输出重定向。

在 stop 模式下,那个正在特定数据目录运行的服务器被关闭。你可以用 -m 选项选择三种不同的关闭模式:"Smart" 模式(也是缺省模式)等待所有客户端中断联接且正在进行的备份将被终止。如果服务器不是hot standby,恢复和流复制也将被在客户端连接中断后退出。"Fast" 模式并不等待客户端中断联接。 所有活跃事务都被回滚并且客户端都强制断开。 "Immediate" 模式将在没有干净关闭的情况下退出。这么做将导致在重新启动的时候的恢复。

restart 实际上是先执行一个停止,然后紧跟一个启动。它允许变换postgres命令行的选项。

reload 模式简单地给postmaster发送一个 SIGHUP 信号,导致它重新读取她的配置文件 (postgresql.conf,pg_hba.conf 等等) 这样就允许修改配置文件选项而不用完全重启系统来使之生效。

status 模式检查一个服务器是否在指定的数据目录运行, 如果是,那么显示其 PID 和调用它的命令行选项。

生产模式,运行在某个数据目录的standby服务器将退出恢复并进开始进行读写操作。

kill 模式允许你给一个指定的进程发送信号。这个功能对 Microsoft Windows 特别有用,因为那里没有 kill 命令。 使用 --help 查看支持的信号的名字的列表。

register 模式允许你在 Microsoft Windows 上注册一个系统服务。-S选项用于设定启运类型,或者“自动”(系统启动时自动启动)或者“后台”(后台运行)。

unregister 模式允许你在 Microsoft Windows 上删除这个系统服务, 这个系统服务是前面用 register 命令注册的。

Options

-c

允许服务器崩溃时产生core文件,只要其所在的平台允许,所有的信息将会放进core文件中。异常进程产生的堆栈信息对于调试或问题诊断非常有用。

-D datadir

声明该数据库文件的文件系统位置。 如果忽略这个选项,使用环境变量 PGDATA。

-l filename

把服务器日志输出附加在 filename 文件上。 如果该文件不存在,那么创建它。umask设置为 077, 因此缺省时是不允许从其它用户向日志文件访问的。

-m mode

声明关闭模式。mode 可以是smart, fast, 或者 immediate,或者是这三个之一的第一个字母。若不指定,缺省是smart模式。

-o options

声明要直接传递给 postgres 的选项。
参数通常都用单或者双引号包围以保证它们作为一个整体传递。

-o initdb-options

指定要直接传递给initdb命令行的选项。
参数通常都用单或者双引号包围以保证它们作为一个整体传递。

-p path

声明 postgres 可执行文件的位置。缺省时postgres是从和pg_ctl相同的目录取出,如果不是, 那么就是写死的安装目录。除非你想干点什么特别的事情,并且得到类似没有找到postgres这样的错误,否则没有必要使用这个选项。
在init模式,该选项相同的用来指定initdb可执行文件的位置。

-s

只打印错误,而不打印提示性信息。

-t

等待启动或关闭完成的最大秒数。缺省是60秒。

-w

等待启动或者关闭的完成。 这个参数是关闭时的缺省值,但不是启动时的缺省值。等待启动时,pg_ctl不断地尝试连接服务器。等待关闭时,pg_ctl等待服务器删除其PID文件。pg_ctl基于启动或关闭成功与否返回退出代码。

-W

不等待启动或者停止的完成。这是启动和重起的缺省。

Options for Windows

-N servicename

要注册的系统服务的名字。这个名字将用于服务名和显示名。

-P password

用户启动服务的口令。

-S start-type

注册系统服务的启动类型。启动类型可以是auto或demand,或者二者的首字母。如果不指定,缺省值是auto.

-U username

启动服务的用户名。对于domain用户,格式为DOMAIN\username.

Environment

PGDATA

缺省数据目录位置

pg_ctl 像其他PostgreSQL实用工具一样,同样使用libpq支持的环境变量(参照Section 31.13)。其他的变量,参照postgres.

Files

postmaster.pid

该文件是否存在用于帮助pg_ctl判断服务器是否正在运行。

postmaster.opts

如果该文件存在于数据目录,pg_ctl(在启动模式下)将以该文件的内容为参数传递给postgres,除非被-o选项覆盖。该文件内容也会在状态模式下显示。

Examples

Starting the Server

启动服务器:

$ pg_ctl start

启动服务器,等待至服务器接受连接:

$ pg_ctl -w start

使用端口5433启动服务器,同时禁用fsync:

$ pg_ctl -o "-F -p 5433" start

Stopping the Server

关闭服务器:

$ pg_ctl stop

选项-m用来控制服务器关闭方式:

$ pg_ctl stop -m fast

Restarting the Server

服务器重启几乎等价于关闭后再启动,只是pg_ctl保存并重用了传递给之前进程的命令行选项。最简单的重启:

$ pg_ctl restart

重启服务器并等待其关闭并重启:

$ pg_ctl -w restart

使用端口5433重启,重启时禁用fsync:

$ pg_ctl -o "-F -p 5433" restart

Showing the Server Status

下面是简单的pg_ctl状态输出例子:

$ pg_ctl status
pg_ctl: server is running (PID: 13718)
/usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"

This is the command line that would be invoked in restart mode.

See Also

initdb, postgres

pg_resetxlog

Name

重置一个 PostgreSQL 数据库集群的预写日志以及其它控制内容

Synopsis

pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid,fileid,seg ] datadir

Description

pg_resetxlog 清理预写日志(WAL)并且可以选择地重置其它一些存储在 pg_control 文件中的控制信息。 有时候,如果这些文件崩溃了,我们需要这个功能。 我们一定只把它用作最后的方法,就是说只有因为这样的崩溃导致服务器无法启动的时候才使用。

在运行这个命令之后,我们可能可以启动服务器了,但是, 一定要记住数据库可能因为部分提交的事务而含有不完整的数据。 你应该马上转储你的数据,运行 initdb,然后重新装载。 在重新装载之后,检查不完整的部分然后根据需要进行修复。

这个命令只能由安装服务器的用户运行,因为它需要对数据目录的读写权限。 出于安全考虑,你必须在命令行上声明数据目录。 pg_resetxlog 不使用环境变量 PGDATA。

如果 pg_resetxlog 抱怨说它无法判断用于 pg_control 的有效数据,那么你可以强制它继续处理, 方法是声明 -f (强制)开关。在这种情况下,那些丢失了的数据的值将用模糊的近似数值代替。 大多数字段都可以匹配上,但是下一个 OID,下一个事务 ID,下一个多事务 ID (两阶段提交的东西)和偏移量, WAL 开始地址以及数据库区域字段可能需要手工帮助, 前面几个可以用下面讨论的开关设置。 如果你不能判断所有这些字段的正确数值,那么还是可以使用 -f, 但是这样恢复过来的数据库更要怀疑有问题:立即转储和重置是必须的。 在转储之前不要执行任何修改数据的操作,因为任何这样的动作都可能把事情搞得更糟糕。

-o,-x,-m,-O 和 -l 开关允许我们手工设置下一个 OID,下一个事务 ID,下一个多事务 ID, 下一个多事务偏移量,以及 WAL 起始位置的数值。只有在 pg_resetxlog 无法通过读取 pg_control 判断合适的数值的时候才需要它。安全的数值可以用下面方法判断:

对于下一个事务 ID 而言,一个安全的数值是看看数据目录里的 /pg_clog 里数值最大的文件名, 然后加一,然后再乘上 1048576。 请注意那些文件名是十六进制的。通常我们也以十六进制的形式声明开关值是最简单的。 比如,如果 0011 是 pg_clog 里最大的记录, -x 0x1200000 就可以了(后面的五个零提供了合适的乘积)。
下一个多事务 ID (-m)的安全值可以通过查看数据目录里 pg_multixact/offsets 子目录里面的数字最大的文件名,加一,然后乘以 65536 得到。 和上面一样,文件名是十六进制的,因此最简单的方法是给开关声明一个十六进制的开关值, 然后在后面加四个零。
下一个多事务偏移量(-O)的安全值可以通过检查数目目录里 pg_multixact/members 子目录下的数字最大的文件名,加一,乘以 65536 得到。和上面一样, 文件名是十六进制的,因此最简单的方法是给开关声明一个十六进制的开关值,然后背后加四个零。
WAL 的起始位置(-l)应该比目前存在于数据目录里得 /pg_xlog 里面的任何文件号都大。它的文件名也是十六进制的,并且有三部分。 第一部分是"时间线 ID",通常应该保持相同。 第三部分不要选择大于 255(0xFF); 应该是在达到 255 的时候给第二部分增一然后重置第三部分为 0。 比如,如果 00000001000000320000004A 是 pg_xlog 里最大的条目, 那么-l 0x1,0x32,0x4B 就可以了; 但如果最大的条目是 000000010000003A000000FF, 选择 -l 0x1,0x3B,0x0 或更多。
注意:pg_resetxlog本身看起来在pg_xlog文件里并且选择默认的-l选项来设置为最后存在的文件名。因此,只有明确知道WAL段文件并没有在当前pg_xlog里才可以手动调整-l,比如这些条目在离线的存档里或者pg_xlog内容完全丢失。
我们没有很容易的办法来判断比数据库中最大的 OID 大一号的下一个 OID, 不过很走运的是获取正确的下一个 OID 并非非常关键的事情。
事务ID时间轴事实上并不存在于数据库的任何地方,只存在pg_resetxlog设置字段里,所以只要数据库接受都可以工作。你可能需要调整该值来确保复制系统,比如Slony-I,工作正常,这样的话需要从下游复制数据库状态里获得合适的值。

开关 -n (无操作)指示 pg_resetxlog 打印从 pg_control 重新构造的数值然后不修改任何值就退出。 这主要是一个调试工具,但是在 pg_resetxlog 真正处理前进行的整洁性检查的时候可能会有用。

-V 和--version选项打印pg_resetxlog版本信息并退出。-?和--help选项输出支持的参数并退出。

Notes

在 postmaster 运行的时候一定不要运行这个命令。 如果发现在数据文件目录里有锁文件,那么 pg_resetxlog 将拒绝启动。如果 postmaster 崩溃,那么可能会剩下一个锁文件; 如果这样,你可以删除该锁文件以便允许 pg_resetxlog 运行。但是在你这么做之前,一定要确信没有任何postmaster或者后端服务器仍在运行。

postgres

Name

PostgreSQL数据库服务器

Synopsis

postgres [option...]

Description

postgres 是PostgreSQL数据库服务器。客户端应用为了访问数据库必须连接(通过网络或本地)到一个运行的postgres实例。postgres实例启动一个独立的服务来处理连接。

一个postgres实例通常管理着整个数据库集群的数据。一个数据库集群是存储在常见文件系统中某个位置(数据区)的数据库集合。同时可以有多个postgres实例运行,只要它们使用不同的数据区以及不同的通信端口(看下面)。postgres需要知道数据区的位置才可以启动。位置必须通过-D选项或者PGDATA环境变量指定,没有缺省值。通常,-D或者PGDATA直接指向initdb创建的数据目录。其他可能的文件布局在18.2章节里讨论过。

缺省情况下postgres在前台启动并打印日志到标准错误流。实际应用中postgres应该在后台启动,也许是系统启动时。

postgres命令也可以以单用户模式调用。主要用途是在自举时被initdb调用。有时用于调式或灾难恢复,需要注意的是运行单用户服务器并不真的适合调试服务器,因为没有真实的进程间通信以及锁发生。一旦从shell中进入单用户模式,用户可以进行查询并且查询结果会直接输出到屏幕,但是输出格式对开发者有用但不是终端用户。在单用户模式下,会话用户ID将被设置为1并且隐含的超级用户权限也将授予该用户。该用户事实上不需要退出,所以单用户模式可以用来从某种系统表的灾难损坏中手动恢复。

Options

postgres接受下面的命令行参数。这些参数的详细讨论请查阅18章。如不想每次都敲这些参数,可以将其保存到一个配置文件。一些(安全)选项也可以通过应用特殊的方式设置,这些设置仅针对当前会话。例如,如果设置了PGOPTIONS环境变量,基于libpq的客户端将传递该字符串到服务器,基将被解释成postgres命令行选项。

General Purpose

-A 0|1

打开运行时断言检查,这是一个帮助发现程序错误的调试手段。该选项只在PosgreSQL被编译阶段开启了断言检查才有效。如打开了,那么断言检查缺省是开启的。

-B nbuffers

设置服务进程可以使用的共享缓冲区的大小。initdb自动选定该参数的缺省值。指定该选项等同于设置share_buffers的配置参数。

-c name=value

设置一个命名的运行时参数。PostgreSQL 支持的配置参数在 Chapter 18 里描述。 大多数其他命令行选项实际上都是这样的参数赋值的短形式。 -c 可以出现多次用以设置多个参数。

-d debug-level

设置调试级别。数值越高,写到服务器日志的调试输出越多。 数值范围是 1 到 5。也可以为特定的会话设置-d 0,以此来阻止postgres父进程输出日志到当前会话。

-D datadir

声明数据目录或者配置文件的文件系统路径。细节详见 Section 18.2。

-e

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

-F

关闭 fsync 调用,提高性能,但是要冒系统崩溃时数据毁坏的风险。 声明这个选项等效关闭了 fsync 参数。在使用之前阅读详细文档!

-h hostname

声明监听来自前端应用 TCP/IP 联接的 IP 主机名或地址。 数值也可以是一个用逗号分隔的地址列表,或者*表示监听所有可用的地址。空值表示不监听任何 IP 地址,而只是使用 Unix 域套接字用于与服务器连接。 缺省的时候是只监听 localhost。 声明这个选项等效于设置 listen_addresses 配置参数。

-i

这个选项打开 TCP/IP (网际域套接字)通讯。 没有这个选项,只能接受本地连接。 这个选项等效于在 postgresql.conf 中或者通过 -h 设置 listen_addresses 为 *。
这个选项已经废弃了,因为它不能实现 listen_addresses 的所有功能。 我们最好直接设置 listen_addresses。

-k directory

声明侦听着等待来自前端应用联接的 Unix 域套接字的位置。 缺省通常是 /tmp,但是可以在编包的时候修改。

-l

这个选项打开用 SSL 进行的安全通讯。要使用这个选项,编译PostgreSQL时你必须打开了 SSL 选项。 有关使用 SSL 的信息,请参考 Section 17.9。

-N max-connections

设置服务器最大可接受客户端的连接数。initdb自动选择缺省值。声明这个选项等效于声明 max_connections 配置参数。

-o extra-options

在 extra-options 里声明的 postgres 选项都传递给所有由这个postgres 启动的服务进程。如果选项字串包含任何空格,整个字串必须引起来。
该选项已被废弃,所有用于服务进程的命令行选项都可以直接指定。

-p port

声明监听着等待客户端应用连接的互联网 TCP/IP 端口或一个本地 Unix 域套接字文件扩展(描述符)。 缺省的端口号是环境变量 PGPORT 的值。如果没有设置 PGPORT,缺省是编译时建立的值(通常是 5432)。 如果你声明了一个非缺省端口,那么所有客户端应用都必须用命令行选项或者 PGPORT 声明同一个端口。

-s

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

-S work-mem

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

--name=value

设置一个命名的运行时参数;其缩写形式是 -c。

--describe-config

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

Semi-internal Options

该选项在这里描述主要用于调试目的,在某些场合下帮助恢复严重损坏的数据库。构建产品数据时没理由使用它们。它们列在这只被PostgreSQL系统开发者使用。而且,这些选项在将来的发布中可能不通知地改变或移除。

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

禁用特定的扫描和连接方法:s和i分别禁用连续和索引扫描,n、m和h分别禁用嵌入式循环、合并和哈希连接。
连续扫描和嵌入式循环都不可能被完全禁止;-fs和-fm选项只是简单地阻止优化器使用该方案。

-n

该选项用于调试导致服务器异常挂机问题。这种情况下的策略是通知所有的服务器进程必须中断并且重新初始化共享内存和信号量。因为某个错误的服务器进程可能已经损坏了共享状态。该选项指定postgres不重新初始化共享数据结构。一个有经验的系统程序员可以使用调试器来检查共享内存和信号量状态。

-O

允许系统表结构可以被修改。该选项被initdb使用。

-P

在读系统表时忽略索引,但是修改这些表时更新索引。这在恢复损坏的系统索引时非常有用。

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

查询主要的系统模块时输出时间统计信息。该选项不能与-s选项一起使用。

-T

该选项用于调试导致服务器异常挂机问题。这种情况下的策略是通知所有的服务器进程必须中断并且重新初始化共享内存和信号量。因为某个错误的服务器进程可能已经损坏了共享状态。该选项指定postgres通过发送SIGSTOP来终止所有服务器进程,但是不会导致它们终止。这允许系统程序员手动从服务器进程收集core dumps

-v protocol

为特定的会话指定前端和后端使用的协议版本。该选项只做内部使用。

-W seconds

设置某个新的服务器进程启动并完成鉴权过程后延迟的秒数。主要提供attach上服务器进程进行debug的机会。

Options for Single-User Mode

下面的选项只提供给单用户模式。

--single

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

database

指定访问的数据库名字。这必须是命令行最后一个参数。如果没有该参数将缺省使用用户名。

-E

回显所有的命令。

-j

禁用换行符作为语句的分隔符。

-r filename

发送所有的服务端日志到某个文件。在正常的多用模式该选项被忽略了,所有进程使用标准错误输出。

Environment

PGCLIENTENCODING

客户端使用的确缺省字符编码。(客户端可以独立地覆盖这个。)这个值也可以在配置文件里设置。

PGDATA

缺省数据目录位置

PGDATESTYLE

运行时参数 DateStyle 的缺省值。(已经不再鼓励使用环境变量了。)

PGPORT

缺省端口(最好再配置文件中设置)

TZ

服务器时区

Diagnostics

一旦提到了 semget 或者 shmget 的错误信息可能意味着你需要配置你的内核, 提供足够的共享内存和信号量。更多讨论,参阅 Section 17.4。你也可以通过降低 shared_buffers 参数值以减少 PostgreSQL的共享内存的消耗, 或者降低max_connections的参数值减少PostgreSQL的信号量的消耗, 以此可以推迟重新配置内核。

如果错误信息提示有另外一个服务端已经运行,你就需要仔细检查,比如使用下面的命令:

$ ps ax | grep postgres

or

$ ps -ef | grep postgres

具体使用哪种取决于你的系统。如果确信没有冲突的在运行,那么你可以删除消息里提到的锁文件然后再次运行。

如果错误信息提示不能绑定某个端口,可以是该端口已被其他非PostgreSQL进程占用。如果你终断了postgres并立即重启且使用了相同的端口也可以遇到这个错误,你需要等几秒终让操作系统关闭这个端口再试。最后,如果你使用了操作系统保留端口也可能遇到错误。比如,很多版本的Unix将端口号小于1024的设为信任并只允许Unix超级用户访问。

Notes

工具命令 pg_ctl 可以用于安全而有效地启停 postgres。

如果有可能,不要使用 SIGKILL杀死 postgres。 这样会阻止其在退出前释放它持有的系统资源(例如共享内存和信号灯)。这样新的postgres运行时可能会有问题。

要正常结束 postgres,可以使用信号 SIGTERM,SIGINT, 或 SIGQUIT。 第一个信号将等待所有的客户端退出后才退出。 第二个将强制断开所有客户端,而第三个将不停止立刻退出, 导致在重起时的恢复运行。

信号SIGHUP将重新加载服务端配置文件。也可以给某个独立的服务进程发SIGHUP,但通常感知不到变化。

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

postgres服务器使用SIGTERM通知下属的服务进程正常退出,使用SIGQUIT强制退出并不做正常的清理。这些信号不应该被用户使用。给服务进程发送SIGKILL信号是不明智的,postgres主进程将以崩溃终止并且强制让兄弟进程也退出,方便进行崩溃恢复过程。

Bugs

--选项在FreeBSD或者OpenBSD上无效。使用-c替代。这在受影响的操作系统上是个bug;将来的发布如果还不能解决该问题将提供一个修补方案。

Usage

启动一个单用户模式服务器,使用命令

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

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

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

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

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

请注意独立运行的服务器不会提供复杂的行编辑功能(比如,没有命令行历史)。单用户模式也不做任何后台处理,比如自动检查。

Examples

后台启动postgres并使用缺少参数:

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

用特定端口,如1234启动postgres:

$ postgres -p 1234

使用psql连接到服务端,同时使用-p选项指定端口:

$ psql -p 1234

或者也可以设置环境变量PGPORT:

$ export PGPORT=1234
$ psql

命名的运行时参数可以使用下面的方式之一:

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

任何一种形式都将覆盖postgresql.conf文件中的work_mem设置。请注意在参数名里的下划线在命令行上可以写成下划线,也可以写成划线。除了短期试验外,推荐使用postgresql.conf而不是打开命令行开关来设置参数。

See Also

initdb, pg_ctl

postmaster

Name

postmaster -- PostgreSQL database server

Synopsis

postmaster [option...]

Description

postmaster是个不推荐使用的postgres别名。

See Also

postgres