PostgreSQL集群篇——postgresql.conf配置文件解析

正文

日常中我们进行安装PostgreSQL后都需要对其进行配置基础配置,以便其能有效发挥出服务器的性能,下面是我进行整理后的postgresql.conf配置文件的相关注释,方便大家对于各个属性进行熟悉。

#------------------------------------------------------------------------------
# 基础文件位置
#------------------------------------------------------------------------------
data_directory = '/opt/postgres/data'       # 数据库数据存储目录
                    # (需要重启生效)
hba_file = '/opt/postgres/data/pg_hba.conf' # 用户访问数据库认证限定文件
                    # (需要重启生效)
ident_file = '/opt/postgres/data/pg_ident.conf' # 使用ident 协议访问数据库时系统用户与数据库用户对应关系配置文件
                    # (需要重启生效)
#------------------------------------------------------------------------------
# 连接和认证配置 CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - 连接设置 Connection Settings -
listen_addresses='*'        # 多个ip使用英文逗号分隔即可;默认是 'localhost'; 设置为 '*' 时表示所有IP均可访问
                    # (需要重启生效)
port = 5432             # 数据库访问端口号 (需要重启生效)
max_connections = 100           # 数据库支持的最大连接数 连接数 = ((核心数 * 2) + 有效磁盘数)
                                # 通常在一台高配服务器中连接数在300-1000以内性能最高
                                # 你需要一个小连接池,和一个充满了等待连接的线程的队列
# 如果你有10000个并发用户,设置一个10000的连接池基本等于炸掉服务器。
# 1000仍然很恐怖。即是100也太多了。
# 你需要一个10来个连接的小连接池,然后让剩下的业务线程都在队列里等待。
# 连接池中的连接数量应该等于你的数据库能够有效同时进行的查询任务数(通常不会高于2*CPU核心数)
superuser_reserved_connections = 3  # 为具有超级用户权限的用户预留的连接数 
                    # (需要重启生效)
unix_socket_directories = '.'   # 指定服务器用于监听来自客户端应用的连接的 Unix 域套接字目录。
                    # (需要重启生效)
#unix_socket_group = ''     # 设置 Unix 域套接字的所属组(套接字的所属用户总是启动服务器的用户)
                    # (需要重启生效)
unix_socket_permissions = 0700      # 设置 Unix 域套接字的访问权限
                    # (需要重启生效)
#bonjour = off              # 通过Bonjour广告服务器的存在。默认值是关闭
                    # (需要重启生效)
#bonjour_name = ''          # 指定Bonjour服务名称。空字符串''(默认值)表示使用计算机名。
                    # (需要重启生效)

# - 安全和认证 -

authentication_timeout = 10s        # 完成客户端认证的最长时间,以秒计
#ssl = off              # (需要重启生效)
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # 指定一个SSL密码列表,用于安全连接。
                    # (需要重启生效)
#ssl_prefer_server_ciphers = on     # 指定是否使用服务器的 SSL 密码首选项,而不是用客户端的。默认为真。(需要重启生效)
#ssl_ecdh_curve = 'prime256v1'      # 指定用在ECDH密钥交换中的曲线名称。它需要被所有连接的客户端支持。 它不需要与服务器椭圆曲线密钥使用的曲线相同。默认值是prime256v1。
                    # (需要重启生效)
#ssl_cert_file = 'server.crt'       # 指定包含 SSL 服务器证书的文件名。默认值是server.crt (需要重启生效)
#ssl_key_file = 'server.key'        # 指定包含 SSL 服务器私钥的文件名。默认值为server.key。 (需要重启生效)
#ssl_ca_file = ''           # 指定包含 SSL 服务器证书颁发机构(CA)的文件名 (需要重启生效)
#ssl_crl_file = ''          # 指定包含 SSL 服务器证书撤销列表(CRL)的文件名。默认值为root.crl (需要重启生效)
#password_encryption = on # 当在CREATE USER或ALTER ROLE中指定了一个密码,而没有写ENCRYPTED或UNENCRYPTED时,这个参数决定是否密码会被加密。默认值是on(加密密码)
#db_user_namespace = off  # 允许针对每个数据库的用户名。默认是关闭的。
#row_security = on          # 此变量控制是否提高错误以代替应用行安全策略。
                            # 当设置为on时,策略往往适用。 
                            # 当设置为off时,查询失败,这将应用至少一个策略。 默认为on。
# GSSAPI using Kerberos
#krb_server_keyfile = ''   # 设置 Kerberos 服务器密钥文件的位置。
#krb_caseins_users = off   # 设置 Kerberos 和 GSSAPI 用户名是否应区分大小写。默认是off(区分大小写)

# - TCP Keepalives -
# see "man 7 tcp" for details

#tcp_keepalives_idle = 0        # 指定不活动多少秒之后通过 TCP 向客户端发送一个 keepalive 消息。 
                                # 这个参数只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE符号的系统或 Windows 上才可以使用。
                    # 0 值表示使用默认值
#tcp_keepalives_interval = 0        # 指定在多少秒之后重发一个还没有被客户端告知已收到的 TCP keepalive 消息
                    # 0 值表示使用默认值
#tcp_keepalives_count = 0       # 指定与客户端的服务器连接被认为死掉之前允许丢失的 TCP keepalive 数量
                    # 0 值表示使用默认值


#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------

# - 内存 -

shared_buffers = 10GB           # 设置数据库服务器将使用的共享内存缓冲区量。默认通常是 128 兆字节(128MB)
                                # 一个合理的shared_buffers开始值是系统内存的 25%
                                #  为了能把对写大量新的或改变的数据的处理分布在一个较长的时间段内, shared_buffers更大的 设置通常要求对max_wal_size也做相应增加
                                # windows上可用的shared_buffers值通常是从 64MB 到 512 MB
                                # min 128kB
                    # (需要重启生效)
#huge_pages = try           # 启用/禁用巨型内存页面的使用。可用的值是 try(默认)、on、 和off。
                    # 当前,只有 Linux 上支持这个特性。在其他系统上这个参数被设置为 try时,它会被忽略。
                    # 当huge_pages被设置为try时,服务器将 尝试使用巨型页面,如果失败则会转回去使用正常的分配。如果设置为 on,使用巨型页面失败会阻止服务器启动。如果设置为 off,则不会使用巨型页面。
                    # (需要重启生效)
temp_buffers = 8MB          # 设置每个数据库会话使用的临时缓冲区的最大数目。这些都是会话的本地缓冲区,只用于访问临时表。默认是 8 兆字节(8MB)
                            # 
#max_prepared_transactions = 0      # 设置可以同时处于"prepared"状态的事务的最大数目;把这个参数设置 为零(这是默认设置)将禁用预备事务特性
                                    # 该特性主要是为了事务管理器时使用,日常业务会话事务无需使用该配置。
                                    # 当运行一个后备服务器时,这个参数必须至少与主服务器上的一样大。否则,后备服务器上将不会执行查询。
                    # (需要重启生效)
work_mem = 4MB              # 指定在写到临时磁盘文件之前被内部排序操作和哈希表使用的内存量。该值默认为四兆字节(4MB)
                            # 注意对于一个复杂查询, 可能会并行运行好几个排序或者哈希操作;每个操作都会被允许使用这个参数指定的内存量,然后才会开始写数据到临时文件。同样,几个正在运行的会话可能并发进行这样的操作。因此被使用的总内存可能是work_mem值的好几倍,在选择这个值时一定要记住这一点。ORDER BY、DISTINCT和归并连接都要用到排序操作。哈希连接、基于哈希的聚集以及基于哈希的IN子查询处理中都要用到哈希表。
                            # min 64kB
maintenance_work_mem = 40MB     # 指定在维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)中使用的 最大的内存量。其默认值是 64 兆字节(64MB)。
                                # 因为在一个数据库会话中,一个时刻只有一个这样的操作可以被执行,并且一个数据库安装通常不会有太多这样的操作并发执行, 
                                # 把这个数值设置得比work_mem大很多是安全的。 更大的设置可以改进清理和恢复数据库转储的性能。
                                # 注意 autovacuum_max_workers 该参数设置的数量,实际能打开的内存大小是maintenance_work_mem * autovacuum_max_workers
                                # min 1MB
#replacement_sort_tuples = 150000   # 限制替换选择排序的使用,当超过150000条数据时使用替换算法进行排序相对效率要低一些,同时受限maintenance_work_mem
#autovacuum_work_mem = -1       # 指定每个自动清理工作者进程能使用的最大内存量。其默认值为 -1,
                                # 当-1时转而使用 maintenance_work_mem的值。当运行在其他上下文环境中时, 这个设置对VACUUM的行为没有影响。
#max_stack_depth = 2MB          # 指定服务器的执行堆栈的最大安全深度。
                                # 这个参数的理想设置是由内核强制的实际栈尺寸限制(ulimit -s所设置的或者本地等价物),减去大约一兆字节的安全边缘。
                                # 我们当前采用的linux通常是8M,则这里最大默认可设置7MB,如果更大需要更改linux本身的默认堆栈空间大小
                                # min 100kB
dynamic_shared_memory_type = posix  # 指定服务器应该使用的动态共享内存实现。默认posix
                    # supported by the operating system:
                    #   posix
                    #   sysv
                    #   windows
                    #   mmap
                    # use none to disable dynamic shared memory

# - Disk -

temp_file_limit = -1            # 指定一个会话能用于临时文件(如排序和哈希临时文件,或者用于保持游标的存储文件)的最大磁盘空间量。
                                # 一般情况使用默认值-1不用做限制
                    # in kB, or -1 for no limit

# - Kernel Resource Usage -
#
max_files_per_process = 1000        # 设置每个服务器子进程允许同时打开的最大文件数目。默认是 1000 个文件。
                    # (需要重启生效)

# 第三方插件模块,多个加载时使用","进行分割常用如下:
shared_preload_libraries = 'pg_stat_statements'     # 这个变量指定一个或者多个要在服务器启动时预载入的共享库。

# auth_delay 模块,使服务器在报告认证失败之前短暂暂停一下
auth_delay.milliseconds = 5000          # 在报告认证失败之前等待的毫秒数,默认值为0

# auto_explain 模块,可以定义sql执行的时间以记录在postgres的日志中,包含sql的直接计划。
auto_explain.log_min_duration = 1s    # 记录执行超过1s的sql
auto_explain.log_analyze = true         # 执行statement, 得到真实的运行时间以及统计信息
auto_explain.log_verbose = true         # 是否输出详细信息,如列,schema,trigger等信息
auto_explain.log_buffers = true         # 缓冲区用量统计信息是否被打印出来。这个参数只有当开启auto_explain.log_analyze后才有作用,默认为off。
auto_explain.log_nested_statements = true # 使嵌套语句被记录下来。默认为off。

# pg_stat_statements 监控SQL模块
pg_stat_statements.track_utility=off    # 是否跟踪非DML语句 (例如DDL,DCL),on表示跟踪, off表示不跟踪  
pg_stat_statements.max = 1000           # 在pg_stat_statements中最多保留多少条统计信息,通过LRU算法,覆盖老的记录
pg_stat_statements.track = all          # all - (所有SQL包括函数内嵌套的SQL), top - 直接执行的SQL(函数内的sql不被跟踪), none - (不跟踪)


# - 基于代价的清理延迟 -

vacuum_cost_delay = 10ms        # 进程超过代价限制后将休眠的时间长度,以毫秒计。其默认值为0,这将禁用基于代价的清理延迟特性。正值将启用基于代价的清理。注意在很多系统上,实际的休眠延迟单位是10毫秒
#vacuum_cost_page_hit = 1       # 清理一个在共享缓存中找到的缓冲区的估计代价。它表示锁住缓冲池、查找共享哈希表和扫描页内容的代价。默认值为1
#vacuum_cost_page_miss = 10     # 清理一个必须从磁盘上读取的缓冲区的代价。它表示锁住缓冲池、查找共享哈希表、从磁盘读取需要的块以及扫描其内容的代价。默认值为10
#vacuum_cost_page_dirty = 20        # 当清理修改一个之前干净的块时需要花费的估计代价。它表示再次把脏块刷出到磁盘所需要的额外I/O。默认值为20
vacuum_cost_limit = 200         # 将导致清理进程休眠的累计代价。默认值为200
# 注:实际延迟的计算方式是vacuum_cost_delay * accumulated_balance / vacuum_cost_limit,且最大值是vacuum_cost_delay * 4


# - 后台写入器 -

bgwriter_delay = 200ms          # 指定后台写入器活动轮次之间的延迟。
bgwriter_lru_maxpages = 500     # 在每个轮次中,不超过这么多个缓冲区将被后台写入器写出。把这个参数设置为零可禁用后台写出,默认值是 100 个缓冲区。
#bgwriter_lru_multiplier = 2.0      # 每一轮次要写的脏缓冲区的数目基于最近几个轮次中服务器进程需要的新缓冲区的数目。
#bgwriter_flush_after = 512kB       # 不管何时 bgwriter 写入了超过bgwriter_flush_after字节, 尝试强制 OS 把这些写发送到底层存储上。
# 注:较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier可以降低由后台写入器造成的额外 I/O 开销。但更可能的是,服务器进程将必须自己发出写入操作,这会延迟交互式查询。

# - 异步行为 -

effective_io_concurrency = 300  # 设置PostgreSQL可以同时被执行的并发磁盘 I/O 操作的数量。
                                # 允许的范围是 1 到 1000,或 0 表示禁用异步 I/O 请求。
                                # 异步 I/O 依赖于一个有效的posix_fadvise函数 (一些操作系统可能没有)。 如果不存在这个函数,将这个参数设置为除 0 之外的任何东西将导致错误。
                                # SSD 以及其他基于内存的存储常常能处理很多并发请求, 因此它们的最佳值可能是数百。
#max_worker_processes = 8       # 设置系统能够支持的后台进程的最大数量。这个参数只能在服务器启动时设置。 默认值为 8。
                                # (需要重启生效)
#max_parallel_workers_per_gather = 0    # 设置单个Gather节点能够开始的工作者的最大数量。设置为 0(默认值)将会禁用并行查询执行
#old_snapshot_threshold = -1        # 设置在使用快照时,一个快照可以被使用而没有发生snapshot too old 错误风险的最小时间。
                                    # 值为-1会禁用这个特性,并且这个值是默认值。
                    # (需要重启生效)
#backend_flush_after = 0        # 只要一个后端写入了超过backend_flush_after字节, 就会尝试强制 OS 把这些写发送到底层存储。
                                # 合法的范围位于0 (禁用受控写回)和2MB之间。默认是0(即没有刷写控制)

#------------------------------------------------------------------------------
# 预写式日志
#------------------------------------------------------------------------------

# - Settings -

wal_level = hot_standby         # wal_level决定多少信息写入到 WAL 中。默认值是minimal, 只写入从崩溃或立即关机恢复所需要的信息。
                                # archive添加 WAL 归档所需要的日志。 hot_standby则进一步增加在一个后备服务器上运行只读查询所需的信息。 最后,logical会增加支持逻辑解码所需的信息。
                                # 为了在一个后备服务器上启用只读查询,主服务器上的wal_level必须设置为hot_standby或更高级别, 并且后备服务器上必须启用hot_standby。
                    # (需要重启生效)
#fsync = on             # 如果打开这个参数,PostgreSQL服务器将尝试确保更新被物理地写入到磁盘,做法是发出fsync()系统调用或者使用多种等价的方法(见wal_sync_method)。
                        # 虽然关闭fsync常常可以得到性能上的收益,但当发生断电或系统崩溃时可能造成不可恢复的数据损坏。因此,只有在能很容易地从外部数据中重建整个数据库时才建议关闭fsync。
                        # fsync只能在postgresql.conf文件中或在服务器命令行上设置。如果你关闭这个参数,请也考虑关闭full_page_writes。
#synchronous_commit = on        # 指定在命令返回“success”指示给客户端之前,一个事务是否需要等待 WAL 记录被写入磁盘。
                                # 合法的值是on、remote_apply、remote_write、local和off。默认的并且安全的设置是on。
#wal_sync_method = fsync        # 用来向强制 WAL 更新到磁盘的方法。如果fsync是关闭的,那么这个设置就不相关,因为 WAL 文件更新将根本不会被强制。
                    # supported by the operating system:
                    #   open_datasync 用open()选项O_DSYNC写 WAL 文件
                    #   fdatasync (default on Linux) 在每次提交时调用fdatasync()
                    #   fsync 在每次提交时调用fsync()
                    #   fsync_writethrough 在每次提交时调用fsync(),强制任何磁盘写高速缓存的直通写
                    #   open_sync 用open()选项O_SYNC写 WAL 文件
#full_page_writes = on          # 当这个参数为打开时,PostgreSQL服务器在一个检查点之后的页面的第一次修改期间将每个页面的全部内容写到 WAL 中。默认值是on
wal_compression = on            # 当这个参数为on时,如果full_page_writes 为打开或者处于基础备份期间,PostgreSQL服务器 会压缩写入到 WAL 中的完整页面镜像。
#wal_log_hints = off            # 当这个参数为on时,PostgreSQL服务器一个检查点之后页面被第一次修改期间把该磁盘页面的整个内容都写入 WAL,即使对所谓的提示位做非关键修改也会这样做。
                    # (需要重启生效)
wal_buffers = -1            # 用于还未写入磁盘的 WAL 数据的共享内存量。
                            # 默认值 -1 选择等于shared_buffers的 1/32 的尺寸(大约3%),但是不小于64kB也不大于 WAL 段的尺寸(通常为)
                    # (需要重启生效)
wal_writer_delay = 200ms        # 指定 WAL 写入器的活动轮次之间的延迟。在每个轮次中写入器会将 WAL 刷到磁盘。之后,休眠wal_writer_delay毫秒,然后重复。默认值是 200 毫秒(200ms)。
#wal_writer_flush_after = 1MB       # 指定 WAL 写入器刷写 WAL 的频繁程度。 

commit_delay = 20   # 在一次 WAL 刷写被发起之前,commit_delay增加一个时间延迟,以微妙计。
commit_siblings = 5         # range 1-1000 在执行commit_delay延迟时,要求的并发活动事务的最小数目。

# - Checkpoints 检查点 -

checkpoint_timeout = 5min       # range 30s-1d 自动 WAL 检查点之间的最长时间。如果指定值时没有单位,则以秒为单位。 合理的范围在 30 秒到 1 天之间。默认是 5 分钟(5min)。增加这个参数的值会增加崩溃恢复所需的时间。
max_wal_size = 10GB         # 在自动WAL检查点使得WAL增长到最大尺寸。这是软限制;特殊情况下WAL大小可以超过 max_wal_size,如重负载下,错误archive_command,或者 较大wal_keep_segments的设置。缺省是1GB。
min_wal_size = 80MB     # 只要WAL磁盘使用率低于这个设置,旧的WAL文件总数被回收,以供将来检查点使用。
#checkpoint_completion_target = 0.5 # 指定检查点完成的目标,作为检查点之间总时间的一部分。默认是 0.5, 0.0 - 1.0
#checkpoint_flush_after = 256kB     # 在执行检查点时,只要有checkpoint_flush_after字节被写入, 就尝试强制 OS 把这些写发送到底层存储。
#checkpoint_warning = 30s       # 如果由于填充检查点段文件导致的检查点之间的间隔低于这个参数表示的秒数,那么就向服务器日志写一个消息(它建议增加max_wal_size的值)。默认值是 30 秒(30s)。

# - Archiving -

archive_mode = on       # 当启用archive_mode时,可以通过设置 archive_command命令将完成的 WAL 段发送到 归档存储。 off, on, or always
                # (需要重启生效)
#bin/date
archive_command = 'test ! -f /pgbackup/data/pg_xlog/%f && cp %p /pgbackup/data/pg_xlog/%f'      # command to use to archive a logfile segment
                # placeholders: %p = path of file to archive
                #               %f = file name only
                # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
archive_timeout = 5min      # archive_command仅在已完成的 WAL 段上调用。
                # number of seconds; 0 disables


#------------------------------------------------------------------------------
# 复制
#------------------------------------------------------------------------------

# - 发送服务器(s) -

# 这些参数可以在任何发送复制数据给一个或多个后备服务器的服务器上设置。主控机总是一个发送服务器,因此这些参数总是要在主控机上设置。这些参数的角色和含义不会在一个后备机变成主控机后改变。

max_wal_senders = 3     # 指定来自后备服务器或流式基础备份客户端的并发连接的最大数量(即同时运行 WAL 发送进程 的最大数)。默认值是零,它意味着禁用复制。
                # WAL 发送进程被计算在连接总数内,因此该参数 不能被设置为高于max_connections的值。
                # wal_level必须设置为archive或更高级别以允许来自后备服 务器的连接。
                # (需要重启生效)
wal_keep_segments = 200     # 指定在后备服务器需要为流复制获取日志段文件的情况下,pg_xlog目录下所能保留的过去日志文件段的最小数目。每个段通常是 16 兆字节。

wal_sender_timeout = 60s    # 中断那些停止活动超过指定毫秒数的复制连接。

#max_replication_slots = 0  # 指定服务器可以支持的复制槽最大数量。默认值为零。
                # (需要重启生效)
#track_commit_timestamp = off   # 记录事务提交时间。默认值是off。
                # (需要重启生效)

# - 主服务器 -

# These settings are ignored on a standby server.

#synchronous_standby_names = '' #  这个参数指定一个支持同步复制的后备服务器的列表。'*' = all
#vacuum_defer_cleanup_age = 0   # 指定VACUUM和HOT更新在清除死亡行版本之前,应该推迟多久(以事务数量计)。默认值是零个事务,
                                # 表示死亡行版本将被尽可能快地清除,即当它们不再对任何打开的事务可见时尽快清除。

# - 后备服务器 -

# 这些设置空值接收复制数据的一个后备服务器的行为。它们的值与主服务器无关。

hot_standby = on            # 指定在恢复期间,你是否能够连接并运行查询
                    # (需要重启生效)
#max_standby_archive_delay = 30s    # 当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后备机查询之前,后备服务器应该等待多久
                    # 当 WAL 数据被从 WAL 归档(并且因此不是当前的 WAL)时,max_standby_archive_delay可以应用。默认值是 30 秒。
                    # -1 允许后备机一直等到冲突查询结束。
max_standby_streaming_delay = 30s   # 当热后备机处于活动状态时,这个参数决定取消那些与即将应用的 WAL 项冲突的后备机查询之前,后备服务器应该等待多久
                    # 当 WAL 数据正在通过流复制被接收时,max_standby_streaming_delay可以应用。默认值是 30 秒。
                    #  -1 允许后备机一直等到冲突查询结束。
wal_receiver_status_interval = 1s   # 指定在后备机上的 WAL 接收者进程向主服务器或上游后备机发送有关复制进度的信息的最小频度
                    # 这个参数的值是报告之间的最大间隔,以秒计。
                    # 将这个参数设置为零将完全禁用状态更新。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。默认值是 10 秒。
hot_standby_feedback = on       # 指定一个热后备机是否将会向主服务器或上游后备机发送有关于后备机上当前正被执行的查询的反馈。
                    # 反馈消息的发送频度不会高于每个wal_receiver_status_interval周期发送一次。默认值是off。
#wal_receiver_timeout = 60s     # 中止处于非活动状态超过指定毫秒数的复制链接。
                    # 0 禁用超时机制
                    # 默认值是 60 秒
#wal_retrieve_retry_interval = 5s   # 指定等待服务器应等待多长时间时, 当重试检索WAL数据之前来自任何源 (流复制,本地pg_xlog或者WAL归档)的WAL数据不可用。
                    # 默认值是 5 秒 如果没有指定,单位是毫秒
                    # 此参数有助于配置恢复节点控制等待新的WAL数据可用的时间数。


#------------------------------------------------------------------------------
# QUERY TUNING
#------------------------------------------------------------------------------

# - 规划器方法配制 -

#enable_bitmapscan = on     # 允许或禁止查询规划器使用位图扫描计划类型。默认值是on
#enable_hashagg = on        # 允许或禁用查询规划器使用哈希聚集计划类型。默认值是on
#enable_hashjoin = on       # 允许或禁止查询规划器使用哈希连接计划类型。默认值是on
#enable_indexscan = on      # 允许或禁止查询规划器使用索引扫描计划类型。默认值是on
#enable_indexonlyscan = on  # 允许或禁止查询规划器使用只用索引扫描计划类型。默认值是on
#enable_material = on       # 允许或者禁止查询规划器使用物化。它不可能完全禁用物化,但是关闭这个变量将阻止规划器插入物化节点,除非为了保证正确性。默认值是on
#enable_mergejoin = on      # 允许或禁止查询规划器使用归并连接计划类型。默认值是on
#enable_nestloop = on       # 允许或禁止查询规划器使用嵌套循环连接计划。它不可能完全禁止嵌套循环连接,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on
#enable_seqscan = on        # 允许或禁止查询规划器使用顺序扫描计划类型。它不可能完全禁止顺序扫描,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on
#enable_sort = on           # 允许或禁止查询规划器使用显式排序步骤。它不可能完全禁止显式排序,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on
#enable_tidscan = on        # 允许或禁止查询规划器使用TID扫描计划类型。默认值是on

# - 规划器代价常量 -

#seq_page_cost = 2.0            # 设置规划器对一系列顺序磁盘页面获取中的一次的代价估计。默认值是 1.0。
#random_page_cost = 4.0         # 设置规划器对一次非顺序获取磁盘页面的代价估计。默认值是 4.0。
#cpu_tuple_cost = 0.01          # 设置规划器对一次查询中处理每一行的代价估计。默认值是 0.01
#cpu_index_tuple_cost = 0.005       # 设置规划器对一次索引扫描中处理每一个索引项的代价估计。默认值是 0.005
#cpu_operator_cost = 0.0025     # 设置规划器对于一次查询中处理每个操作符或函数的代价估计。默认值是 0.0025
#parallel_tuple_cost = 0.1      # 设置规划器对于从一个并行工作者进程传递一个元组给另一个进程的代价估计。 默认是 0.1
#parallel_setup_cost = 1000.0   # 设置规划器对启动并行工作者进程的代价估计。默认是 1000
#min_parallel_relation_size = 8MB   # 设置要考虑用于并行扫描的关系的最小尺寸。 默认是 8 兆字节(8MB
effective_cache_size = 126GB    # 设置规划器对一个单一查询可用的有效磁盘缓冲区尺寸的假设。
                                # 这个参数会被考虑在使用一个索引的代价估计中,更高的数值会使得索引扫描更可能被使用,更低的数值会使得顺序扫描更可能被使用。
                                # 默认值 4GB
# - 遗传查询优化 -
# 遗传查询规划器(GEQO)是一种使用启发式搜索来进行查询规划的算法。它可以降低对于复杂查询(连接很多表的查询)的规划时间,但是代价是它产生的计划有时候要差于使用穷举搜索算法找到的计划。
#geqo = on      # 允许或禁止遗传查询优化。默认是启用。
#geqo_threshold = 12    # 只有当涉及的FROM项数量至少有这么多个的时候,才使用遗传查询优化(注意一个FULL OUTER JOIN只被计为一个FROM项)。默认值是 12。
#geqo_effort = 5            # 控制 GEQO 中规划时间和查询计划质量之间的折中。这个变量必须是位于 1 到 10 之间的一个整数。默认值是 5。
#geqo_pool_size = 0         # 控制 GEQO 使用的池尺寸,它就是遗传种群中的个体数目。它必须至少为 2,且有用的值通常在 100 到 1000 之间。
                            # 如果它被设置为零(默认设置)则会基于geqo_effort和查询中表的数量选择一个合适的值。
#geqo_generations = 0           # 控制 GEQO 使用的代数,也是算法的迭代次数。它必须至少为 1,并且有用值的范围和池尺寸相同。
#geqo_selection_bias = 2.0      # 控制 GEQO 使用的选择偏好。选择偏好是种群中的选择压力。值可以是 1.5 到 2.0 之间,后者是默认值。
#geqo_seed = 0.0            # 控制 GEQO 使用的随机数生成器的初始值,随机数生成器用于在连接顺序搜索空间中选择随机路径。
                            # 该值可以从 0 (默认值)到 1。变化该值会改变被探索的连接路径集合,并且可能导致找到一个更好或更差的路径

# - 其他规划器选项 -

#default_statistics_target = 100    # 为没有通过ALTER TABLE SET STATISTICS设置列相关目标的表列设置默认统计目标。 range 1-10000
                                    # 默认值是 100
#constraint_exclusion = partition   # constraint_exclusion的允许值是on(对所有表检查约束)、off(从不检查约束)和partition(只对继承的子表和UNION ALL子查询检查约束)。partition是默认设置。
                                    # 通常被用于继承和分区表来提高性能
#cursor_tuple_fraction = 0.1        # 设置规划器对将被检索的一个游标的行的比例的估计。默认值是 0.1。
#from_collapse_limit = 8            # 如果生成的FROM列表不超过这么多项,规划器将把子查询融合到上层查询。
                                    # 较小的值可以减少规划时间,但是可能 会生成较差的查询计划。默认值是 8。
#join_collapse_limit = 8        # 如果得出的列表中不超过这么多项,那么规划器将把显式JOIN(除了FULL JOIN)结构重写到 FROM项列表中。
                    # 默认情况下,这个变量被设置成和from_collapse_limit相同, 这样适合大多数使用。
#force_parallel_mode = off          # 允许为测试目的使用并行查询,即便是并不期望在性能上得到效益。
                                #  force_parallel_mode的允许值是off (只在期望改进性能时才使用并行模式)、on (只要查询被认为是安全的,就强制使用并行查询)以及 regress(和on相似, 但是有如下文所解释的额外行为改变)。


#------------------------------------------------------------------------------
# 错误报告和日志
#------------------------------------------------------------------------------

# - Where to Log -

log_destination = 'csvlog'      # PostgreSQL支持多种方法来记录服务器消息,包括stderr、csvlog和syslog。在 Windows 上还支持eventlog。
                    # stderr, csvlog, syslog, and eventlog,
                    # 要产生 CSV 格式的日志输出,必须启用logging_collector。
                    # requires logging_collector to be on.

# This is used when logging to stderr:
logging_collector = on      # 这个参数启用日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中。
                    # into log files. Required to be on for
                    # csvlogs.
                    # (需要重启生效)

# These are only used if logging_collector is on:
log_directory = '/pglogs/pg_log'        # 当logging_collector被启用时,这个参数决定日志文件将被在哪个目录下创建。
                    # 它可以被指定为一个绝对路径,也可以被指定为一个相对于PGPATH数据目录的相对路径。
log_filename = 'postgresql-%d.csv'  # 当logging_collector被启用时,这个参数设置被创建的日志文件的文件名。
                    # 该值被视为一种strftime模式,因此%转义可以被用来指定根据时间变化的文件名
                    # 注意如果有任何时区独立的%转义,计算将在由log_timezone指定的时区中完成
                    # 默认是postgresql-%Y-%m-%d_%H%M%S.log
#log_file_mode = 0600           # 在 Unix 系统上,当logging_collector被启用时,这个参数设置日志文件的权限
                    # 默认的权限是0600,表示只有服务器拥有者才能读取或写入日志文件。其他常用的设置是0640,它允许拥有者的组成员读取文件。
log_truncate_on_rotation = on       # 当logging_collector被启用时,这个参数将导致PostgreSQL截断(覆盖而不是追加)任何已有的同名日志文件。
                    # 不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在服务器启动或基于尺寸的轮转时不会发生。
                    # 如果被关闭,在所有情况下以前存在的文件将被追加。
                    # But such truncation only occurs on
                    # time-driven rotation, not on restarts
                    # or size-driven rotation.  Default is
                    # off, meaning append to existing files
                    # in all cases.
log_rotation_age = 1440         # 当logging_collector被启用时,这个参数决定一个个体日志文件的最长生命期。
                    # happen after that time.  0 disables.
log_rotation_size = 0       # 当logging_collector被启用时,这个参数决定一个个体日志文件的最大尺寸。
                    # happen after that much log output.
                    # 0 disables.

# These are relevant when logging to syslog:
#syslog_facility = 'LOCAL0'     # 当启用了向syslog记录时,这个参数决定要使用的syslog"设备"。
#syslog_ident = 'postgres'      # 当启用了向syslog记录时,这个参数决定用来标识syslog中的PostgreSQL消息的程序名。默认值是postgres。
#syslog_sequence_numbers = on   # 当日志被记录到syslog并且这个设置为 on (默认)时,每一个消息会被加上一个增长的序号作为前缀(例如 [2])。
#syslog_split_messages = on     # 当启用把日志记录到syslog时,这个参数决定消息如何送达 syslog。

# This is only relevant when logging to eventlog (win32):
#event_source = 'PostgreSQL'    # 当启用了向事件日志记录时,这个参数决定用来标识日志中PostgreSQL消息的程序名。默认值是PostgreSQL。

# - When to Log -
# 
#client_min_messages = notice       # 控制被发送给客户端的消息级别。
                    # 有效值是DEBUG5、 DEBUG4、DEBUG3、DEBUG2、 DEBUG1、LOG、NOTICE、 WARNING、ERROR、FATAL和PANIC。
                    # 每个级别都包括其后的所有级别。级别越靠后,被发送的消息越少。默认值是NOTICE。
                    # 注意LOG在这里有与log_min_messages中不同的排名。
log_min_messages = warning      # 控制哪些消息级别被写入到服务器日志。
                    # 有效值是DEBUG5、DEBUG4、 DEBUG3、DEBUG2、DEBUG1、 INFO、NOTICE、WARNING、 ERROR、LOG、FATAL和 PANIC。
                    # 每个级别都包括以后的所有级别。级别越靠后,被发送的消息越少。默认值是WARNING。
                    # 注意LOG在这里有与log_min_messages中不同的排名。只有超级用户可以改变这个设置。
#log_min_error_statement = error    # 控制哪些导致一个错误情况的 SQL 语句被记录在服务器日志中。
                    #   任何指定严重级别或更高级别的消息的当前 SQL 语句将被包括在日志项中。
                    #   有效值是DEBUG5、 DEBUG4、DEBUG3、 DEBUG2、DEBUG1、 INFO、NOTICE、 WARNING、ERROR、 LOG、 FATAL和PANIC。
                    #   默认值是ERROR,它表示导致错误、日志消息、致命错误或恐慌错误的语句将被记录在日志中。
                    #   要有效地关闭记录失败语句,将这个参数设置为PANIC。只有超级用户可以改变这个设置。

log_min_duration_statement = 300ms  # 如果语句运行至少指定的毫秒数,将导致记录每一个这种完成的语句的持续时间。
                    # 将这个参数设置为零将打印所有语句的执行时间。设置为 -1 (默认值)将停止记录语句持续时间。
                    # 如果你设置它为250ms,那么所有运行 250ms 或更久的 SQL 语句将被记录。
                    # 启用这个参数可以有助于追踪应用中未优化的查询。只有超级用户可以改变这个设置。


# - What to Log -
# 这些参数将会让多种调试输出被发出。当被设置时,它们为每一个被执行的查询打印结果分析树、查询重写器输出或执行计划。
# 这些消息在LOG消息级别上被发出,因此默认情况下它们将出现在服务器日志中但不会被发送到客户端。
# 你可以通过调整client_min_messages和/或log_min_messages来改变这种情况。这些参数默认是关闭的。
#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off

#debug_pretty_print = on # 当被设置时,debug_pretty_print会缩进由debug_print_parse、 debug_print_rewritten或 debug_print_plan产生的输出。
log_checkpoints = on    # 导致检查点和重启点被记录在服务器日志中。
log_connections = on    # 导致每一次尝试对服务器的连接被记录,客户端认证的成功完成也会被记录。
log_disconnections = on # 记录会话终止原因。
log_duration = on       # 导致每一个完成的语句的持续时间被记录。
log_error_verbosity = verbose       # 控制为每一个被记录的消息要写入到服务器日志的细节量。
                                    # 有效值是TERSE、DEFAULT和VERBOSE,每一个都为显示的消息增加更多域。
                                    # TERSE排除记录DETAIL、HINT、QUERY和CONTEXT错误信息。
                                    # VERBOSE输出包括SQLSTATE错误码以及产生错误的源代码文件名、函数名和行号。
#log_hostname = off         # 默认情况下,连接日志消息只显示连接主机的 IP 地址。打开这个参数将导致也记录主机名。
log_line_prefix = '%a-%u-%h-%m'         # 这是一个printf风格的字符串,它在每个日志行的开头输出。%字符开始"转义序列",它将被按照下文描述的替换成状态信息。未识别的转义被忽略。
log_lock_waits = on         # 控制当一个会话为获得一个锁等到超过deadlock_timeout时,是否要产生一个日志消息。
log_statement = 'all'           # 控制哪些 SQL 语句被记录。有效值是 none (off)、ddl、mod和 all(所有语句)。
                            # none, ddl, mod, all
#log_replication_commands = off     # 导致每个复制命令记录在服务器日志中。
#log_temp_files = -1            # 控制记录临时文件名和尺寸。临时文件可以被创建用来排序、哈希和存储临时查询结果。
log_timezone = 'Asia/Shanghai'          # 设置在服务器日志中写入的时间戳的时区。和TimeZone不同,这个值是集簇范围的,因此所有会话将报告一致的时间戳。


# - Process Title -

cluster_name = 'server1'            # 设置出现在集群中的所有进程标题中的集群名称。进程中显示该名称
                    # (需要重启生效)
update_process_title = on           # 启用更新进程标题的特性,这个特性在每次服务器接收到一个新SQL命令时都会更新进程的标题。


#------------------------------------------------------------------------------
# 运行时统计数据
#------------------------------------------------------------------------------

# - 查询和索引统计收集器 -

#track_activities = on      # 启用对每个会话的当前执行命令的信息收集,还有命令开始执行的时间。这个参数默认为打开。
#track_activity_query_size = 1024   # 声明保留的字节数,以跟踪每个活动会话的当前执行命令,对 pg_stat_activity.current_query段。 
                                    # 默认值是1024。
#track_counts = on          # 启用在数据库活动上的统计收集。这个参数默认为打开,因为自动清理守护进程需要被收集的信息。
#track_io_timing = off      # 启用对系统 I/O 调用的计时。这个参数默认为关闭,因为它将重复地向操作系统查询当前时间,这会在某些平台上导致显著的负荷。
#track_functions = none         # 启用跟踪函数调用计数和用时。
                            # 指定pl只跟踪过程语言函数
                            # 指定all还会跟踪 SQL 和 C 语言函数。
                            # 默认值是none,它禁用函数统计跟踪。
#stats_temp_directory = 'pg_stat_tmp'   # 设置存储临时统计数据的目录。
                            # 这可以是一个相对于数据目录的路径或一个绝对路径。默认值是pg_stat_tmp。

# - 统计监控 -
# 对每个查询,向服务器日志里输出相应模块的性能统计。所有这些选项都是默认禁用的。
#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
log_statement_stats = on    # 报告总的语句统计,而其它的报告针每个模块的统计。不能和 其它任何针对每个模块统计的选项一起启用


#------------------------------------------------------------------------------
# 自动清理
#------------------------------------------------------------------------------

autovacuum = on         # 控制服务器是否运行自动清理启动器后台进程。默认为开启
                    # 要自动清理正常工作还需要启用track_counts
log_autovacuum_min_duration = 0 # 如果自动清理运行至少该值所指定的毫秒数,被自动清理执行的每一个动作都会被日志记录。
                    # 将该参数设置为0会记录所有的自动清理动作
                    # -1(默认值)将禁用对自动清理动作的记录
                    # 如果你将它设置为250ms,则所有运行250ms或更长时间的自动清理和分析将被记录。
autovacuum_max_workers = 10     # 指定能同时运行的自动清理进程(除了自动清理启动器之外)的最大数量。默认值为3。
                    # (需要重启生效)
#autovacuum_naptime = 1min      # 指定自动清理在任意给定数据库上运行的最小延迟。
#autovacuum_vacuum_threshold = 50   # 指定能在一个表上触发VACUUM的被插入、被更新或被删除元组的最小数量。
                    # 默认值为50个元组
#autovacuum_analyze_threshold = 50  # 指定能在一个表上触发ANALYZE的被插入、被更新或被删除元组的最小数量。
                    # 默认值为50个元组
#autovacuum_vacuum_scale_factor = 0.2   # 指定一个表尺寸的分数,在决定是否触发VACUUM时将它加到autovacuum_vacuum_threshold上
                    # 默认值为0.2(表尺寸的20%)
#autovacuum_analyze_scale_factor = 0.1  # 指定一个表尺寸的分数,在决定是否触发ANALYZE时将它加到autovacuum_analyze_threshold上
                    # 默认值为0.1(表尺寸的10%)
#autovacuum_freeze_max_age = 200000000  # 指定在一个VACUUM操作被强制执行来防止表中事务ID回卷之前,一个表的pg_class.relfrozenxid域能保持的最大年龄(事务的)
                    # (需要重启生效)
#autovacuum_multixact_freeze_max_age = 400000000    # 指定在一个VACUUM操作被强制执行来防止表中多事务ID回卷之前,一个表的pg_class.relminmxid域能保持的最大年龄(多事务的)
                    # before forced vacuum
                    # (需要重启生效)
#autovacuum_vacuum_cost_delay = 20ms    # 指定用于自动VACUUM操作中的代价延迟值。
                    # 如果指定-1(默认值),则使用vacuum_cost_delay值。默认值为20毫秒。
#autovacuum_vacuum_cost_limit = -1  # 指定用于自动VACUUM操作中的代价限制值。
                    # 如果指定-1(默认值),则使用vacuum_cost_limit值


#------------------------------------------------------------------------------
# 客户端连接默认值
#------------------------------------------------------------------------------

# - 语句行为 -

#search_path = '"$user", public'    # 这个变量指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引用时,用于进行搜索该对象的模式顺序。
                            # search_path的值必需是一个逗号分隔的模式名列表。
                            # 任何不是一个已有模式的名称,或者是一个用户不具有USAGE权限的模式,将被安静地忽略。
#default_tablespace = ''        # 这个变量指定当一个CREATE命令没有显式指定一个表空间时,创建对象(表和索引)的默认表空间。
                                # 该值要么是一个表空间的名字,要么是一个指定使用当前数据库默认表空间的空字符串。
#temp_tablespaces = ''          # 这个变量指定当一个CREATE命令没有显式指定一个表空间时,创建临时对象(临时表和临时表上的索引)的默认表空间。
                    # 默认值是一个空字符串,它使得所有临时对象被创建在当前数据库的默认表空间
#check_function_bodies = on     # 当设置为off时,它禁用CREATE FUNCTION期间对函数体字符串的验证。
                                # 禁用验证避免了验证处理的副作用并且避免了如向前引用导致的伪肯定。
#default_transaction_isolation = 'read committed'   # 每个 SQL 事务都有一个隔离级别,可以是"读未提交"、"读已提交"、"可重复读"或者"可序列化"。
                                # 这个参数控制每个新事务的默认隔离级别。默认是"读已提交"。
#default_transaction_read_only = off    # 一个只读的 SQL 事务不能修改非临时表。
                                # 这个参数控制每个新事务的默认只读状态 。默认是off(读/写)。
#default_transaction_deferrable = off   # 当运行在可序列化隔离级别时,一个可延迟只读 SQL 事务可以在它被允许继续之前延迟一段时间。
#session_replication_role = 'origin'    # 为当前会话控制复制相关的触发器和规则的触发
#statement_timeout = 30000          # 中止任何使用了超过指定毫秒数的语句,从命令到达服务器开始计时。
#lock_timeout = 0           # 如果任何语句在试图获取表、索引、行或其他数据库对象上的锁时等到超过指定的毫秒数,该语句将被中止
#idle_in_transaction_session_timeout = 0        # 终止任何已经闲置超过这个参数所指定的时间(以毫秒计)的打开事务的会话。
#vacuum_freeze_min_age = 50000000       # 指定VACUUM在扫描表时用来决定是否冻结行版本的切断年龄(以事务计)。
#vacuum_freeze_table_age = 150000000    # 当表的pg_class.relfrozenxid域达到该设置指定的年龄时,VACUUM会执行一次全表扫描。
#vacuum_multixact_freeze_min_age = 5000000      # 指定VACUUM在扫描表时用来决定是否把组合事务 ID 替换为一个更新的事务 ID 或组合事务 ID 的切断年龄(以组合事务计)
#vacuum_multixact_freeze_table_age = 150000000  # 如果表的pg_class.relminmxid域超过了这个设置指定的年龄,VACUUM会执行一次全表扫描。
#bytea_output = 'hex'           # 设置bytea类型值的输出格式。有效值是hex(默认)和 escape(传统的 PostgreSQL 格式)
#xmlbinary = 'base64'           # 设置二进制值如何被编码为 XML。
#xmloption = 'content'          # 当在XML和字符串值之间进行转换时,无论设置DOCUMENT或 CONTENT都是隐式的。
#gin_fuzzy_search_limit = 0     # GIN 索引返回的集合尺寸的软上限。
#gin_pending_list_limit = 4MB   # 当启用fastupdate时,设置正在使用的GIN挂起列表的最大尺寸。

# - 区域和格式化 -

datestyle = 'iso, ymd'      # 设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。
#intervalstyle = 'postgres'     # 设置间隔值的显示格式。
timezone = 'Asia/Shanghai'      # 设置用于显示和解释时间戳的时区。内建默认值是GMT
#timezone_abbreviations = 'Default'     # 设置服务器接受的日期时间输入中使用的时区缩写集合。默认值为'Default'
#extra_float_digits = 0         # 这个参数为浮点值调整显示的位数,包括float4、float8以及几何数据类型。
                                # min -15, max 3
#client_encoding = sql_ascii        # 设置客户端编码(字符集)。默认使用数据库编码。
                    # sql_ascii 任意字符集

# These settings are initialized by initdb, but they can be changed.
lc_messages = 'en_US.UTF-8'         # 设置消息显示的语言。可接受的值是系统相关的;
                    # strings
lc_monetary = 'en_US.UTF-8'         # 设置用于格式化货币量的区域,例如用to_char函数族。
lc_numeric = 'en_US.UTF-8'          # 设置用于格式化数字的区域,例如用to_char函数族。
lc_time = 'en_US.UTF-8'             # 设置用于格式化日期和时间的区域,例如用to_char函数族。

# default configuration for text search
default_text_search_config = 'pg_catalog.english'   # 选择被那些没有显式参数指定配置的文本搜索函数变体使用的文本搜索配置。

# - 共享库预载入 -
# 为了载入附加的功能或者达到提高性能的目的,可用多个设置来预先载入共享库到服务器中。
#dynamic_library_path = '$libdir'   # 如果需要打开一个可以动态装载的模块并且在CREATE FUNCTION或LOAD命令中指定的文件名没有目录部分(即名字中不包含斜线),那么系统将搜索这个路径以查找所需的文件。
#local_preload_libraries = ''       # 这个变量指定一个或者多个要在连接开始时预载入的共享库。
#session_preload_libraries = ''     # 这个变量指定一个或者多个要在连接开始时预载入的共享库。


#------------------------------------------------------------------------------
# 锁管理
#------------------------------------------------------------------------------

deadlock_timeout = 2s       # 这是进行死锁检测之前在一个锁上等待的总时间(以毫秒计)。
                            # 死锁检测相对昂贵,因此服务器不会在每次等待锁时都运行这个它。
#max_locks_per_transaction = 64     # 共享锁表跟踪在max_locks_per_transaction * (max_connections + max_prepared_transactions) 个对象(如表)上的锁。
                    # 因此,在任何一个时刻,只有不超过这么多个可区分对象能够被锁住。这个参数控制为每个事务分配的对象锁的平均数量。
                    # (需要重启生效)
#max_pred_locks_per_transaction = 64    # 共享谓词锁表跟踪在max_pred_locks_per_transaction * (max_connections + max_prepared_transactions) 个对象(如表)上的锁。
                    # (需要重启生效)


#------------------------------------------------------------------------------
# 版本和平台兼容性
#------------------------------------------------------------------------------

# - Previous PostgreSQL Versions -

#array_nulls = on       # 这个参数控制数组输入解析器是否把未用引号的NULL识别为一个空数组元素。
                        # 默认为on
#backslash_quote = safe_encoding    # 这个参数控制字符串文本中的单引号是否能够用\'来表示。首选的 SQL 标准的方法是将其双写(''),但是PostgreSQL在历史上也接受\'。
#default_with_oids = off    # 这个参数控制CREATE TABLE和CREATE TABLE AS在既没有指定WITH OIDS也没有指定WITHOUT OIDS的情况下,是否在新创建的表中包含 OID 列。
#escape_string_warning = on     # 打开时,如果在普通字符串文本中('...'语法)出现了 一个反斜线(\)并且standard_conforming_strings为关闭,那么就会发出一个警告。默认值是on。
#lo_compat_privileges = off     # 在9.0之前的版本中,大对象没有连接权限,并且对所有用户哦都是可读可写的。
                                # 将这个变量设置为on,从而禁用新的权限检查,以与以前的版本兼容。 默认是off。
#operator_precedence_warning = off      # 当开启时,解析器为了可能修改的任何结构发出警告, 意味着PostgreSQL 9.4操作符优先级中作为修改结果。
#quote_all_identifiers = off        # 当数据库产生 SQL 时,强制所有标识符被引号包围,即使它们(当前)不是关键字。
#sql_inheritance = on       # 当数据库产生 SQL 时,强制所有标识符被引号包围,即使它们(当前)不是关键字。
#standard_conforming_strings = on       # 控制普通字符串文本('...')是否按照 SQL 标准把反斜线当普通文本。从PostgreSQL 9.1 开始,默认值为on(之前的发行中默认值为off)。
#synchronize_seqscans = on      # 它允许对大型表的顺序扫描与其他扫描同步,因此并发扫描可以在几乎相同的时刻读取相同的块,这样可以分担 I/O 负载。

# - 平台和客户端兼容性 -

#transform_null_equals = off        # 当打开时,形为expr = NULL(或NULL = expr)的表达式将被当做expr IS NULL, 也就是说,如果expr得出空值值则返回真,否则返回假。


#------------------------------------------------------------------------------
# 错误处理
#------------------------------------------------------------------------------

#exit_on_error = off            # 如果为真,任何错误将中止当前会话。
                                # 默认情况下,这个值被设置为假,这样只有 FATAL 错误(致命)将中止会话。
#restart_after_crash = on       # 当被设置为真(默认值)时,PostgreSQL将在一次后端崩溃后自动重新初始化。
                                # 让这个值设置为真通常是将数据库可用性最大化的最佳方法。


#------------------------------------------------------------------------------
# 预置选项
#------------------------------------------------------------------------------

# These options allow settings to be loaded from files other than the
# default postgresql.conf.

include_dir = 'conf.d'          # include files ending in '.conf' from
                    # directory 'conf.d'
#include_if_exists = 'exists.conf'  # include file only if it exists
#include = 'special.conf'       # include file


#------------------------------------------------------------------------------
# CUSTOMIZED OPTIONS
#------------------------------------------------------------------------------

# Add settings for extensions here
本文声明:

image
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。