I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
postgres
名称
postgres--PostgreSQL 数据库服务器语法
postgres
[option
...]
描述
postgres
是 PostgreSQL 数据库服务器。客户端应用程序为了访问数据库,将通过 TCP Socket 或 Unix domain socket 连接到一个运行中的 postgres
进程。然后该 postgres
实例将启动(fork)一个新的、独立的服务器进程来处理这个连接。
一个 postgres
总是管理来自同一个数据库集群的数据。一个数据库集群是一组在同一个文件系统位置("数据区")存放数据的数据库。一个系统上可以同时运行多个 postgres
进程,只要他们使用不同的数据区和不同的端口号(见下文)。postgres
启动时需要知道数据区的位置,该位置必须通过 -D
选项或 PGDATA
环境变量指定。通常,-D
或 PGDATA
都直接指向由 initdb 创建的集群目录。其他可能的文件布局在节17.2里面有讨论。
缺省时 postgres
在前台启动并将日志信息输出到标准错误。但在实际应用中,postgres
应当作为后台进程启动,而且多数是在系统启动时自动启动。
postgres
还能以单用户模式运行。这种用法的主要用于 initdb 的初始化过程中。有时候它也被用于调试灾难性恢复。不过,单用户模式运行的服务器并不适合于调试,因为没有实际的进程间通讯和锁动作发生。当从 shell 上以单用户模式调用时,用户可以输入查询,然后结果会在屏幕上以一种更适合开发者阅读(不适合普通用户)的格式显示出来。在单用户模式下,将把会话用户 ID 设为 1 并赋予超级用户权限。该用户不必实际存在,因此单用户模式运行的服务器可以用于对某些意外损坏的系统表进行手工恢复。
选项
postgres
接受下列命令行参数。关于这些选项的更详细讨论请参考章17。你也可以通过设置一个配置文件来减少敲击这些选项。有些(安全的)选项还可以从连接过来的客户端设置,以一种应用无关的方法仅对该会话生效。比如,如果设置了 PGOPTIONS
环境变量,那么基于 libpq 的客户端就都把那个字符串传递给服务器,并被服务器解释成 postgres
命令行选项。
通用用途
-A 0|1
打开运行时断言检查,是检测编程错误的调试帮助。只有在编译 PostgreSQL 时打开了它,你才能使用它。如果编译时打开了,缺省是打开。
-B
nbuffers
为服务器进程分配和管理的共享内存缓冲区数量。这个参数的缺省值是 initdb 自动选择的;参考节17.4.1获取更多信息。
-c
name
=value
设置一个命名的运行时参数。PostgreSQL 支持的配置参数在章17里描述。大多数其它命令行选项实际上都是这样的参数赋值的短形式。
-c
可以出现多次从而设置多个参数。-d
debug-level
设置调试级别。数值越高,写到服务器日志的调试输出越多。取值范围是 1 到 5 。还可以针对某次单独的会话使用
-d 0
来防止从父postgres
进程继承日志级别。-D
datadir
声明数据目录或者配置文件的文件系统路径。细节详见节17.2。
-e
把缺省日期风格设置为"European",也就是说用
DMY
规则解释日期输入,并且在一些日期输出格式里日子在月份前面打印。参阅节8.5获取更多细节。-F
关闭
fsync
调用以提高性能,但是要冒系统崩溃时数据毁坏的风险。声明这个选项等效关闭了 fsync 参数。在使用之前阅读详细文档!-h
hostname
指定
postgres
侦听来自前端应用 TCP/IP 连接的 IP 主机名或地址。数值也可以是一个用空格分隔的地址列表,或者*
表示监听所有可用的地址。空值表示不监听任何 IP 地址,而只使用 Unix 域套接字与客户端通信。缺省只监听 localhost 。声明这个选项等效于设置 listen_addresses 配置参数。-i
这个选项允许远程客户通过 TCP/IP(网际域套接字)与服务器通讯。没有这个选项,服务器将只接受本地连接。这个选项等效于在
postgresql.conf
中或者通过-h
选项将listen_addresses
设为*
这个选项已经废弃了,因为它不能实现 listen_addresses 的所有功能。所以最好直接设置
listen_addresses
-k
directory
指定
postgres
侦听来自前端应用连接的 Unix 域套接字的目录。缺省通常是/tmp
,但是可以在编译的时候修改。-l
这个选项使用 SSL 进行的安全通讯。要使用这个选项,编译 PostgreSQL 时你必须打开了 SSL 支持。有关使用 SSL 的信息,请参考节16.7。
-N
max-connections
设置最多允许同时连接多少个客户端(也就是最多同时运行多少个服务器进程)。缺省值为 32 ,不过该值最大可以设置为系统所能承受的极限。请注意
-B
的值要求至少两倍于-N
的值。参阅节16.4获取有关大量客户的系统资源需求。声明这个选项等效于声明 max_connections 配置参数。-o
extra-options
在
extra-options
里面指定的命令行选项将被传递给所有由这个postgres
派生的服务进程。如果选项字符串包含任何空白,那么整个字符串必须用引号界定。反对使用该选项,所有服务器进程的命令行选项都可以直接在
postgres
命令行上指定,不必这么麻烦。-p
port
指定
postgres
侦听客户端连接的 TCP/IP 端口或本地 Unix domain socket 文件的扩展。缺省的端口号是环境变量PGPORT
的值。如果PGPORT
没有设置,那么缺省是 PostgreSQL 编译时指定的值(通常是 5432)。如果你声明了一个非缺省端口,那么所有前端应用都必须用命令行选项或者PGPORT
声明同一个端口。-s
在每条命令结束时打印时间信息和其它统计信息。这个开关对测试性能和调节缓冲区数量有好处。
-S
work-mem
声明内部排序和散列在求助于临时磁盘文件之前可以使用的内存数量。参阅节17.4.1里描述的配置变量
work_mem
--
name
=value
设置一个命名的运行时参数;其缩写形式是
-c
--describe-config
以制表符分隔的
COPY
格式,导出服务器内部配置变量、描述、缺省值。设计它主要是给管理工具使用。
半内部选项
还有几个其它的选项可以声明,主要用于调试用途。这些东西在这里列出只是给 PostgreSQL 系统开发人员使用的。强烈反对使用这些选项。另外这些选项的任何一项都可能在未来版本中消失而不加说明。
-f
{ s | i | m | n | h }
禁止某种扫描和连接方法的使用:
s
和i
分别关闭顺序和索引扫描,而n
,m
,h
分别关闭嵌套循环,融合(merge)和 Hash 连接。顺序扫描和嵌套循环都不可能完全被关闭。
-fs
和-fn
选项仅仅是在存在其它方法时阻碍优化器使用这些方法罢了。-n
该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程终止并重新初始化共享内存和信号灯。这是因为一个出错的服务器进程可能在终止之前就已经对共享的东西造成了破坏。该选项指定
postgres
不重新初始化共享数据结构。一个有经验的系统程序员这时就可以使用调试器检查共享内存和信号灯状态。-O
允许修改系统表的结构。这个参数用于
initdb
-P
读取系统表时忽略系统索引(但在更改数据时仍然更新索引)。这对于从索引已经损坏的系统表中回复是很有帮助的。
-t
pa[rser] | pl[anner] | e[xecutor]
打印与每个主要系统模块相关的查询记时统计。它不能和
-s
选项一起使用。-T
该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程终止并重新初始化共享内存和信号灯。这是因为一个出错的服务器进程可能在终止之前就已经对共享的东西造成了破坏。该选项指定
postgres
通过发送SIGSTOP
信号停止其他所有服务器进程,但是并不让它们退出。这样就允许系统程序员手动从所有服务器进程搜集内核转储。-v
protocol
声明这次会话使用的前/后服务器协议的版本数。该选项仅在内部使用。
-W
seconds
一旦看见这个选项,进程就睡眠标出的秒数。这样就给开发者一些时间把调试器附着在该服务器进程上。
-y
database
表明这是一个由父
postgres
进程启动的子进程,并使用指定的数据库。该选项仅供内部使用。
单用户模式的选项
下面的选项仅在单用户模式下可用。
--single
选中单用户模式。这个必须是命令行中的第一个选项。
database
要访问的数据库名字。如果忽略掉则缺省为用户名。
-E
回显所有命令
-j
禁止使用新行作为语句分隔符
-r
filename
将所有服务器输出日志保存到
filename
中。在多用户模式下该选项将被忽略,所有进程都将使用 stderr
环境变量
PGCLIENTENCODING
客户端使用的缺省字符编码。客户端可以独立地覆盖它。这个值也可以在配置文件里设置。
PGDATA
缺省数据目录位置
PGDATESTYLE
运行时参数 DateStyle 的缺省值。现在反对使用该环境变量。
PGPORT
缺省端口(最好在配置文件中设置)
TZ
服务器的时区
诊断
一个提到了 semget
或 shmget
的错误信息可能意味着你需要重新配置你的内核,提供足够的共享内存和信号灯。更多讨论,参阅节16.4。你也可以通过降低 shared_buffers 值以减少 PostgreSQL 的共享内存的消耗,或者降低 max_connections 值减少 PostgreSQL 的信号灯的消耗。
如果碰到一个说另外一个服务器正在运行的错误信息,可以根据不同的系统使用命令
$ ps ax | grep postgres
或
$ ps -ef | grep postgres
如果确信没有冲突的服务器正在运行,那么你可以删除消息里提到的锁文件然后再次运行。
抱怨无法绑定端口的错误信息可能表明该端口已经被其它非 PostgreSQL 进程使用。如果终止 postgres
后又马上用同一个端口运行它,也可能得到这个错误信息;这时,你必须多等几秒,等操作系统关闭了该端口后再试。最后,如果你使用了一个操作系统认为是保留的端口,也可能导致这个错误信息。例如,我的 Unix 版本认为低于 1024 的端口号是"可信任的",因而只有 Unix 超级用户可以使用它们。
注意
如果有可能,不要使用 SIGKILL
杀死主 postgres
服务器进程。这样会阻止 postgres
在退出前释放它持有的系统资源(例如共享内存和信号灯)。这样可能会影响到将来启动新的 postgres
进程。
可以使用 SIGTERM
, SIGINT
, SIGQUIT
信号正常结束 postgres
服务器进程。第一个信号将等待所有的客户端退出后才退出。第二个将强制断开所有客户端,而第三个将不停止立刻退出,导致在重启时的恢复运行。SIGHUP
会重新加载服务器配置文件。也可以向一个单独的服务器进程发送 SIGHUP
信号,但是这样做没什么意义。
pg_ctl 工具可以用于安全而有效地启停 postgres
,推荐使用。
要推出一个正在运行的查询,可以向正在执行该查询的进程发送 SIGINT
信号。
主 postgres
服务器进程向子进程发送 SIGTERM
信号让它们正常退出;发送 SIGQUIT
信号立即退出且不做清理工作,用户应当尽量避免使用该信号。同时,发送 SIGKILL
信号也是不明智的:主 postgres
进程将把这个信号当作崩溃信号,然后会强制其他兄弟进程作为标准的崩溃回复过程退出。
臭虫
--
选项在 FreeBSD 或 OpenBSD 上无法运行,应该使用 -c
。这在受影响的系统里是个臭虫;如果这个毛病没有修补好,将来的 PostgreSQL 版本将提供一个绕开的办法。
用法
启动一个单用户模式的服务器:
postgres --single -D /usr/local/pgsql/data other-options
my_database
用 -D
给服务器提供正确的数据库目录的路径,或者确保环境变量 PGDATA
已经正确设置。同时还要声名你想用的特定数据库名字。
通常,独立运行的服务器把换行符当做命令输入完成字符;它还不懂分号的作用,因为那些东西是在 psql 里的。要想把一行分成多行写,你必需在除最后一个换行符以外的每个换行符前面敲一个反斜杠。
但是如果使用了 -j
命令行选项,新行将不被当作命令结束符。此时服务器将从标准输入一直读取到 EOF 标志为止,然后把把所有读到的内容当作一个完整的命令字符串看待,并且反斜杠与换行符也被当作普通字符来看待。
输入 EOF(Control+D)即可退出会话。如果你已经使用了 -j
则必须连续使用两个 EOF 才行。
请注意单用户模式运行的服务器不会提供复杂的行编辑功能(比如,没有命令行历史)。
例子
用缺省值在后台启动 postgres
:
$ nohup postgres >logfile 2>&1 </dev/null &
在指定的端口启动 postgres
:
$ postgres -p 1234
这条命令将在端口 1234 启动 postgres
。你应该这样使用 psql 与之连接:
$ psql -p 1234
或者设置环境变量 PGPORT
:
$ export PGPORT=1234 $ psql
命名的运行时参数可以用下列的风格之一设置:
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
两种形式都覆盖那些现有的在 postgresql.conf
里面的 work_mem
设置。请注意在参数名里的下划线在命令行上可以写成下划线,也可以写成连字符。除了用于短期的实验以外,更好的习惯是编辑 postgresql.conf
里面的设置,而不是倚赖命令行开关设置参数。
又见
initdb, pg_ctl
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论