配置项是每条一行。选项名和值之间的等号是可选的。 空白和空行被忽略。井号(#)用做任何地方引入注释。
#------------------------------------------------------------------------------
# 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_connectionsPostgresql超级用户连接而保留的连接"槽位"。 一次最多可以同时激活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, 否则我们不建议使用这个选项,因为它让我们很难看到错误信息。
这里是这个设置里用到各种信息严重程度类型的一个列表: