PG配置文件在数据目录中,postgresql.conf
配置项是每条一行。选项名和值之间的等号是可选的。 空白和空行被忽略。井号(#)用做任何地方引入注释。
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
data_directory 为数据存储使用的目录。
config_file 主服务器配置文件 默认为postgresql.conf。
hba_file 用于主机为基础的认证配置文件的文件名。 默认为 pg_hba.conf。
ident_file 用于身份认证的配置文件 默认pg_ident.conf。
external_pid_file 服务器管理程序使用的一个附加的 postmaster 进程号(PID)文件的位置。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
listen_addresses 服务器监听客户端应用连接的 TCP/IP 地址。一个逗号分隔的主机名和/或数字IP地址。
port 服务器监听的 TCP 端口。
max_connections 数据库连接的并发连接数目的最大值。缺省通常是 100。
superuser_reserved_connections PostgreSQL 超级用户连接而保留的连接"槽位"。 一次最多可以同时激活 max_connections 个连接。 在活跃的并发连接到了 max_connections 减去 superuser_reserved_connections 的时候, 新的连接就只能由超级用户发起了。
缺省值是 2。这个值必须小于 max_connections 的值。
unix_socket_directory 服务器监听客户端应用连接来临的 Unix 域套接字的目录。 缺省通常是 /tmp。
unix_socket_group 设置 Unix 域套接字的组所有者。
unix_socket_permissions 设置 Unix 域套接字的访问权限。Unix 域套接字使用普通的 Unix 文件系统权限集。 这个选项值应该是数值的形式,也就是那种 Unix 域套接字调用 chmod 和 umask 接受的形式。
缺省的权限是 0777,意思是任何人都可以连接。 合理的候选是 0770(只有用户和同组的人可以访问, 又见 unix_socket_group)和 0700 (只有用户)。(请注意,对于 Unix 域套接字,只有写权限有意义,设置或者撤销读和执行权限没有任何意义。)
bonjour_name 声明 Bonjour 广播地址。缺省的时候,使用计算机名,声明是 ''。
tcp_keepalives_idle
在那些支持 TCP_KEEPIDLE 套接字选项的系统上, 声明发送保持活跃信号的间隔秒数,不发送保持活跃信号,连接就会处于闲置状态。 0 值的话则使用系统缺省。如果不支持 TCP_KEEPIDLE, 这个参数必须为 0。在通过 Unix 域套接字进行的连接上,这个选项被忽略。
tcp_keepalives_interval
在那些支持 TCP_KEEPINTVL 套接字选项的系统上, 以秒数声明在重新传输之间等待响应的时间。0 值表示使用系统缺省。 如果不支持 TCP_KEEPINTVL,这个参数必须为 0。 在通过 Unix 域套接字进行的连接上,这个选项被忽略。
tcp_keepalives_count 在支持 TCP_KEEPCNT 选项的系统上,声明在人为连接断掉之前可以丢失多少个保持活跃信号。 0 值表示使用系统缺省。如果不支持 TCP_KEEPCNT,这个参数必须是 0.
authentication_timeout
完成客户端认证的最长时间,以秒计。如果一个客户端没有在这段时间里完成认证协议, 服务器将中断连接。这样就避免了出问题的客户端无限制地占据连接资源。 这个选项只能在服务器启动的时候设置或者在postgresql.conf 里设置。 缺省是 60。
ssl
打开 SSL 连接。请在使用这个选项之前阅读 Section 16.7。 缺省是 off。这个参数只能在服务器启动的时候设置。
password_encryption
在 CREATE USER 或者 ALTER USER 里声明一个口令, 而又没有写 ENCRYPTED 或者 UNENCRYPTED 的时候,这个选项决定口令是否要加密。 缺省是 on(加密口令)。
krb_server_keyfile (string)
设置 Kerberos 服务器键字文件的位置。参阅 Section 20.2.3 获取细节。 这个参数只能在服务器启动的时候设置。
krb_srvname (string)
设置 Kerberos 服务名。参阅 Section 20.2.3 获取细节。 这个参数只能在服务器启动的时候设置。
krb_server_hostname (string)
设置服务主的主机名部分。这个和 krb_srvname 结合再一起, 用于生成完整的服务主,比如: krb_server_hostname/krb_server_hostname@REALM。
如果没有设置,缺省是允许人和服务主机器在密钥文件里有一条记录。 参阅 Section 20.2.3 获取细节。 这个参数只能在服务器启动的时候设置。
krb_caseins_users (boolean)
设置 Kerberos 用户名是否大小写无相关。缺省是 off(大小写相关)。 这个参数只能在服务器启动的时候设置。
db_user_namespace (boolean)
这样就允许每个数据库的用户名。缺省是关闭的。
如果这是打开的,你应该像 username@dbname 这样创建用户。 在给一个正在连接的客户端传递 username 的时候,必须给用户名附加 @ 和数据库名字, 然后服务器查找该数据库相关的用户名字。请注意,如果你在 SQL 环境里创建包含 @ 的名字时, 你需要用引号包围用户名。
打开这个选项之后,你还是能够创建普通的全局用户。 只要在客户端声明用户的时候附加一个 @ 即可。 在服务器查找这个用户名之前,这个 @ 会被剥除。
注意: 这个特性只是临时试验用途,直到找到一个完全的解决方案。 那个时候,这个选项将被删除。
shared_buffers 设置数据库服务器将使用的共享内存缓冲区数量。
temp_buffers 设置每个数据库会话使用的临时缓冲区的最大数目。
max_prepared_transactions 设置可以同时处于"准备好"状态的事务的最大数目。
work_mem (integer)
声明内部排序操作和散列表在开始使用临时磁盘文件之前使用的内存数目。 数值是以千字节为单位的,缺省是 1024 千字节(1 MB)。 请注意对于复杂的查询,可能会同时并发运行好几个排序或者散列操作; 每个都会被批准使用这个参数声明的这么多内存,然后才会开始求助于临时文件。 同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是 work_mem 的好几倍。 在 ORDER BY,DISTINCT,融合连接,以及 CREATE INDEX里都要用到排序操作。 散列表在散列连接,散列为基础的聚集,以及散列为基础的 IN 子查询处理中都要用到。
maintenance_work_mem (integer)
声明在维护性操作中使用的最大的内存数,比如 VACUUM, CREATE INDEX,和 ALTER TABLE ADD FOREIGN KEY 等。 数值是用千字节计的,缺省是 16384 千字节(16 MB)。 因为在一个数据库会话里,任意时刻只有一个这样的操作可以执行, 并且一个数据库安装通常不会有太多这样的工作并发执行, 把这个数值设置得比 work_mem 更大是安全的。 更大的设置可以改进清理和恢复数据库转储的速度。
max_stack_depth (integer)
声明服务器的执行堆栈的最大安全深度。为此设置一个参数的原因是内核强制的实际堆栈尺寸(就是 ulimit -s 或者局部等效物的设置),小于一个安全的一兆字节左右的范围。 需要这么一个安全的界限是因为在服务器里,并非所有过程都检查了堆栈深度, 儿只是在可能递规的过程,比如表达式计算这样的过程里面进行检查。 把这个参数设置得大于实际的内核限制讲意味着一个正在跑的递归函数可能会导致一个独立服务器进程的崩溃。 缺省设置是 2048 KB (两兆),这个值相对比较小,不容易导致崩溃。 但是,这个值可能太小了,以至于无法执行复杂的函数。
#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------
# - Where to Log -
log_destination
PostgreSQL 支持多种记录服务器日志的方法, 包括 stderr 和 syslog。 在 Windows 里,还支持 eventlog。 允许把 syslog 作为日志系统。 把这个选项设置为一个逗号分隔的日志目标的列表。缺省是只记录到 stderr。 这个选项只能在服务器启动的时候在 postgresql.conf 文件里面设置。
redirect_stderr
这个选项允许把那些发送到 stderr 的消息捕获下来, 然后把它们重定向到日志文件里。这个选项,加上日志记录到 stderr 里的组合, 通常比记录到 syslog 更有用, 因为有些消息类型不出现在 syslog 输出(一个常见的例子是动态连接失败消息)。 这个选项只能在服务器启动的时候设置。
log_directory
在打开了 redirect_stderr 的时候, 这个选项判断日志文件在哪个目录里创建。 它可以声明成绝对路径,或者是与集群的数据目录相对的路径。 这个选项只能在服务器启动的时候在 postgresql.conf 文件里面设置。
log_filename (string)
在打开了 redirect_stderr 的时候,这个选项设置所创建的日志文件的文件名。 这个数值是当作 strftime 模式看待的。 因此 % 逃逸可以声明因时间而变的文件名。 如果没有出现 % 逃逸, PostgreSQL 将附着日志文件打开的纪元时间。 比如,如果 log_filename 是 server_log, 那么选择的文件名将是 server_log.1093827753 — 假如日志文件开始于 Sun Aug 29 19:02:33 2004 MST 的话。 这个选项只能在服务器启动的时候在 postgresql.conf 文件里面设置。
log_rotation_age (integer)
在打开了 redirect_stderr 的时候, 这个选项设置一个独立的日志文件的最大生存期。 在数值指定的分钟过去之后,将创建一个新的日志文件。 设置为零可以关闭以时间为基础的新日志文件的创建。 这个选项只能在服务器启动的时候在 postgresql.conf 文件里面设置。
log_rotation_size (integer)
在打开了 redirect_stderr 的时候, 这个选项设置一个独立的日志文件的最大尺寸。 在数值指定的千字节写入日志文件之后,将会创建一个新的日志文件。 设置为零可以关闭以尺寸为基础的新日志文件的创建。 这个选项只能在服务器启动的时候在 postgresql.conf 文件里面设置。
log_truncate_on_rotation (boolean)
如果打开了 redirect_stderr,这个选项将导致 PostgreSQL 截断(覆盖),而不是附加到任何同名的现有日志文件上。 不过,截断只是发生在因为以时间为基础的旋转的时候创建的新文件上, 而不是在服务器启动的时候或者以尺寸为基础的旋转上。 如果为 off,将在任何情况下都是向已经存在的文件背后追加的。 比如,使用这个选项和类似 postgresql-%H.log 这样的 log_filename 将导致生成 24 个按小时生成的日志文件然后在这些文件上循环。 这个选项只能在服务器启动的时候在 postgresql.conf文件里面设置。
例子:保留 7 天的日志,每天一个日志文件,叫做 server_log.Mon, server_log.Tue,等等,并且上周的日志会自动被这周的日志覆盖, 把 log_filename 设置为server_log.%a, log_truncate_on_rotation 设置为 on, 并且把 log_rotation_age 设置为 1440。
例子:保留 24 小时的日志,每小时一个日志,但是如果日志文件尺寸大于 1GB 也旋转日志, 设置 log_filename 为 server_log.%H%M,log_truncate_on_rotation 为 on, log_rotation_age 为 60,并且把 log_rotation_size 设置为 1000000。 在 log_filename 里包含 %M 允许任何尺寸驱动的旋转选取一个和开始的文件名同小时数但是名字不同的文件。
syslog_facility (string)
如果把日志记录到 syslog 功能打开, 那么这个选项在打开syslog后判断要使用的 syslog "设施"。 你可以从 LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,LOCAL6,LOCAL7 中选择;缺省是LOCAL0。 又见你的系统的 syslog 守护进程文档。这个选项只能在服务器启动的时候设置。
syslog_ident (string)
如果打开了向syslog中记日志的功能, 这个选项决定用于在 syslog 日志中标识 PostgreSQL 的程序名。缺省是 postgres。 这个选项只能在服务器启动的时候设置。
这个选项控制那些信息发送到客户端。 有效的数值是 DEBUG5,DEBUG4, DEBUG3,DEBUG2, DEBUG1,LOG,NOTICE, WARNING 和 ERROR。 每个级别包含所有它后面的级别,级别越靠后,发送的信息越少。 缺省是 NOTICE。这里的 LOG 和 log_min_messages 里面的有不同的级别。
控制写到服务器日志里的信息的详细程度。有效值是 DEBUG5, DEBUG4,DEBUG3,DEBUG2, DEBUG1,INFO,NOTICE, WARNING,ERROR,LOG, FATAL,和 PANIC。 每个级别都包含它后面的级别。越靠后的数值发往服务器日志的信息越少。 缺省是 NOTICE。请注意 LOG 和 client_min_messages 里面的同名级别优先级不同。 只有超级用户可以修改这个设置。
控制记录的每条信息写到服务器日志里的详细程度。 有效的值是 TERSE,DEFAULT,和 VERBOSE, 每个都会向显示的信息里增加更多的字段。只有超级用户可以改变这个设置。
控制是否在服务器日志里输出那些导致错误条件的 SQL 语句。 所有导致一个特定级别(或者更高级别)的错误的 SQL 语句都要被记录日志。 缺省是 PANIC(实际上是把这个特性关闭了)。 有效的值有 DEBUG5, DEBUG4,DEBUG3, DEBUG2,DEBUG1, INFO,NOTICE, WARNING,ERROR, FATAL,和 PANIC。 比如,如果你把这个设置为ERROR, 那么所有导致错误,致命错误,或者恐慌的 SQL 语句都将被记录日志。 打开这个选项可以帮助跟踪那些在服务器日志里出现的任何错误的源头。 只有超级用户可以改变这个设置。
如果某个语句的持续时间大于或者等于这个数字的毫秒数, 那么在一个日志行上记录该语句以及其持续时间。 把这个设置为零将打印所有的查询和他们的持续时间。 设置为负一(缺省值)关闭这个功能。比如,如果你把它设置为 250, 那么所有运行时间等于或者超过 250ms 的 SQL 语句都会被记录日志。 打开这个选项可以很方便地跟踪你的应用里那些没有优化的查询。 这个设置独立于 log_statement 和 log_duration。 只有超级用户可以修改这个设置。
安静的运行服务器。如果设置了这个选项,服务器将自动在后台运行并且与控制终端脱开 (和 postmaster 的 -S 选项效果一样)。 服务器的标准输出和标准错误重定向到/dev/null,因此,发送的任何信息都将丢失。 除非打开了 syslog 日志或者打开了 redirect_stderr, 否则我们不建议使用这个选项,因为它让我们很难看到错误信息。
这里是这个设置里用到各种信息严重程度类型的一个列表:
DEBUG[1-5]
这个提供开发人员使用的信息。
INFO
这个提供用户隐含要求的信息,比如在 VACUUM VERBOSE 过程中的信息。
NOTICE
这个提供可能对用户有帮助的信息,比如,长标识符的截断, 作为主键一部分创建的索引。
WARNING
这个提供给用户的警告,比如在事务块范围之外的 COMMIT。
ERROR
报告导致当前命令退出的错误。
LOG
这个报告一些管理员感兴趣的信息,比如,检查点活跃性。
FATAL
这个报告为什么当前会话终止。
PANIC
报告导致所有会话退出的原因。