postgres

名称

postgres — 运行一个 Postgres 单用户后端

语法

postgres [ dbname ]
postgres [ -B nBuffers ] [ -C ] [ -D DataDir ] [ -E ] [ -F ]
   [ -O ] [ -Q ] [ -S SortSize ] [ -d [ DebugLevel ] ] [ -e ]
   [ -o ] [ OutputFile ] [ -s ] [ -v protocol ] [ dbname ]

输入

postgres 接受下列命令行参数:
 
dbname
可选的参数 dbname 声明要访问的数据库名。dbname 缺省是环境变量 USER 的值。

 
-B nBuffers
如果后端通过 postmaster 运行,nBuffers 是 postmaster 为它启动的后端进程分配和管理的共享内存缓冲区数量。如果后端是独立运行的,这个参数声明要分配的缓冲区数目。此值缺省为 64 个缓冲区,每个缓冲区是 8k 字节(或者 config.h 里设置的 BLCKSZ 大小)。
-C
不要显示服务器版本号。
-D DataDir
声明用做数据库目录树的根的目录。如果没有给出 -D,缺省目录名是环境变量 PGDATA 的值。如果没有设置 PGDATA,那么使用的目录是 $POSTGRESHOME/data。如果两个环境变量和命令行选项都没有给出,用的缺省目录是编译时设置的。
-E
回显所有查询。
-F
在每次事务后面关闭自动的 fsync() 调用。这个选项提高了性能,但是如果在一个事务正在处理过程中操作系统崩溃可能导致最近输入的数据的丢失。没有 fsync() 调用,数据是被操作系统缓冲然后在某个时候写入磁盘。
-O
超越限制,因而可以修改系统表。这些表一般是那些表名称带有 "pg_" 前缀的表。

 
-Q
声明 "quiet" 模式。
-S SortSize
声明内部排序和散列在求助于临时磁盘文件之前可以使用的内存数量。该值是以 KB (千字节)为单位的,缺省是 512 KB。注意对于复杂查询,可能有好几个并行的排序和/或散列,而在它们把数据放到临时文件前,每个都会允许使用最多 SortSize KB的内存。

 
-d [ DebugLevel ]
可选的参数 DebugLevel 决定后端服务器将产生的调试信息输出的数量。如果 DebugLevel 是一,将跟踪所有联接动作,而对其它的一律忽略。对于级别二或更高,后端进程的调试被打开并且 postmaster 显示更多信息,包括后端环境和处理动作。注意如果没有给后端服务器声明他们的调试输出指向的文件,则输出会出现在它们的父postmaster 的控制 tty 上。
-e
这个选项控制输入到数据库和从数据库输出的日期的解释方式。如果应用了-e 开关,那么从前端进程来回的日期将假设是 "European" 格式(DD-MM-YYYY),否则日期将假设为 "American" 格式(MM-DD-YYYY)。后端可以接受的日期格式多种多样,对于输入日期而言,这个选项主要影响易混淆的解释。参阅 PostgreSQL用户手册 获取更多信息。
-o OutputFile
发所有调试和错误输出输出到 OutputFile。如果后端是由postmaster 运行的,错误信息仍然发送给前端,也发送给 OutputFile,但是调试输出发送给该postmaster 的控制 tty(因为只有一个文件描述符可以发送给实际的文件)。
-s
在每条查询结束时打印时间信息和其他统计信息。这个开关对测试性能和调节缓冲区数量有好处。
-v protocol
声明这次会话使用的前/后端协议的版本数。

还有几个其他的选项可以声明,主要用于调试用途。这些东西在这里列出只是给Postgres 系统开发人员使用的。我们强烈反对使用这些选项。另外这些选项的任何一项都可能在任何时间消失。
这些特殊选项是:
 
-A n|r|b|Q\fIn\fP|X\fIn\fP
这个选项产生数量巨大的输出。
-L
关闭锁系统。
-N
关闭把新行作为查询分隔符。
-f [ s | i | m | n | h ]
禁止某种扫描和联合方法的使用:si 分别关闭顺序和索引扫描,而 nm,和 h 分别关闭嵌套循环,融合(merge)和散列联合。
注意:顺序扫描和嵌套循环都不可能完全被关闭。-fs-fn 选项仅仅是在存在其他方法时阻碍优化器使用这些方法罢了。
-i
避免查询执行,而只是显示规划树。
-p dbname
告诉后端服务器它是由一个 postmaster 启动的并对缓冲区管理和文件描述符等做出不同的假设。跟在 -p 后面的开关限于那些被认为是"安全的"。
-t pa[rser] | pl[anner] | e[xecutor]
打印与每个主要系统模块相关的查询记时统计。它不能和-s 选项一块使用。

 

输出

在你直接运行后端服务器可能出现的几乎无穷无尽的错误信息里,最有可能出现的是:
semget: No space left on device

 

 

如果你看到这条信息,你应该运行 ipcclean 命令。干完这个之后,试着重新启动 postmaster。如果还不行,你可能需要按照安装指导里描述的那样配置你的内核的共享内存和信号灯。如果你的内核的共享内存和/或信号灯被限制得很小,你可能要重新配置你的内核以增加共享内存和信号灯参数。

小技巧:你也可以通过降低 -B 的参数以减少 Postgres 的共享内存的消耗,以此可以推迟重新配置内核。

描述

Postgres 可以直接从用户 shell 上面执行。但只有在 DBA 对系统进行调试时可以这样做,而且如果这套数据库的其他 Postgres 后端正在被一个 postmaster 管理时决不能这样做。

这里说明的一些开关可以通过联接请求里的“数据库选项”域传递给后端,因此可以为特定的后端设置而不需要重起 postmaster 的麻烦。这对那些调试开关尤其方便。

可选的参数 dbname 声明要访问的数据库。 dbname 缺省是环境变量 USER 的值。

注意

处理共享内存问题的有用的工具包括 ipcs(1)ipcrm(1),和ipcclean(1)。参阅 postmaster