[TOC]
# <span style="font-size:15px">**PostgreSQL配置文件**</span>
```
# 此文件由以下几行组成:
#
# name = value
# ("="是可选的.)可以使用空格.注释是在一行的任何地方用"#"开头.参数名和允许值的完整列表可以在PostgreSQL文档中找到.
# 该文件中显示的注释化设置表示默认值.重新注释设置不足以将其还原为默认值;您需要重新加载服务器.
#
# 此文件在服务器启动时以及服务器接收到SIGHUP信号时读取.如果您在一个正在运行的系统上编辑文件,您必须检查服务器以使
# 更改生效,运行"pg_ctl reload",或者执行"SELECT pg_reload_conf()".下面标记的一些参数需要服务器关闭并重新启动才能
# 生效.
#
# 任何参数也可以作为服务器的命令行选项,例如,"postgres -c log_connections=on".有些参数可以在运行时使用"SET"SQL命令
# 进行更改.
#
# Memory units(内存单元): kB = kilobytes Time units(时间单元): ms = milliseconds
# MB = megabytes(兆字节) s = seconds(秒)
# GB = gigabytes(千兆字节) min = minutes(分钟)
# TB = terabytes(兆兆字节) h = hours{时}
# d = days(天)
```
## <span style="font-size:15px">**1 文件位置(FILE LOCATIONS)**</span>
```
# 这些变量的默认值由-D命令行选项或PGDATA环境变量驱动,这里表示为ConfigDir.
#data_directory = 'ConfigDir' # 使用其他目录中的数据(更改需要重新启动PG数据库)
#hba_file = 'ConfigDir/pg_hba.conf' # 基于主机的认证文件(更改需要重新启动PG数据库)
#ident_file = 'ConfigDir/pg_ident.conf' # 标识配置文件(更改需要重新启动PG数据库)
# 如果未显式设置外部PID文件,则不会写入额外的PID文件.
#external_pid_file = '' # 写一个额外的PID文件(更改需要重新启动PG数据库)
```
## <span style="font-size:15px">**2 连接和验证(CONNECTIONS AND AUTHENTICATION)**</span>
### <span style="font-size:15px">**2.1 连接设置(Connection Settings)**</span>
```
#默认情况下,只允许登录了数据库的用户执行本地连接. 若想要任何远程的安装程序进行连接.则需要修改listen_addresses配置参数. 修改为='*',表示允许并接受任何地方传入的连接请求.
listen_addresses = '*' # 监听哪个IP地址;以逗号分隔的地址列表.默认监听"localhost",(更改需要重新启动PG数据库)
port = 5678 # PG服务监听端口号-默认端口5432.(更改需要重新启动PG数据库)
#每个客户端连接都会占用很小一部分的"共享内存",系统有限的共享内存默认是不允许过多的连接的. 该参数不能设置得过大,会浪费"共享内存".
max_connections = 100 # 最大连接数(更改需要重新启动PG数据库)
#superuser_reserved_connections = 3 #(更改需要重新启动PG数据库)
#unix_socket_directories = '/tmp' #逗号分隔的目录列表(更改需要重新启动PG数据库)
#unix_socket_group = '' # (更改需要重新启动PG数据库)
#unix_socket_permissions = 0777 # 从0开始使用八进制记数法(更改需要重新启动PG数据库)
#bonjour = off # 通过Bonjour发布服务器(更改需要重新启动PG数据库)
#bonjour_name = '' # 默认为计算机名(更改需要重新启动PG数据库)
# - TCP Keepalives -
# see "man 7 tcp" for details
#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds(秒); 0-选择系统默认值
#tcp_keepalives_interval= 0 # TCP_KEEPINTVL, in seconds(秒);0-选择系统默认值
#tcp_keepalives_count = 0 # TCP_KEEPCNT;0-选择系统默认值
```
### <span style="font-size:15px">**2.2 认证(Authentication)**</span>
```
#authentication_timeout = 1min # 1s-600s
#password_encryption = md5 # md5 or scram-sha-256
#db_user_namespace = off
# GSSAPI using Kerberos(使用kerberos的gssapi)
#krb_server_keyfile = ''
#krb_caseins_users = off
```
### <span style="font-size:15px">**2.3 SSL**</span>
```
#ssl = off
#ssl_ca_file = ''
#ssl_cert_file = 'server.crt'
#ssl_crl_file = ''
#ssl_key_file = 'server.key'
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
#ssl_prefer_server_ciphers = on
#ssl_ecdh_curve = 'prime256v1'
#ssl_dh_params_file = ''
#ssl_passphrase_command = ''
#ssl_passphrase_command_supports_reload = off
```
## <span style="font-size:15px">**3 资源使用(RESOURCE USAGE (except WAL))**</span>
### <span style="font-size:15px">**3.1 内存(Memory)**</span>
```
# 共享内存,服务器使用共享内存的主要部分是分配给缓存块的大型块.用于读取或是写入数据库.
# 预估共享内存大小请参考:https://www.postgresql.org/docs/current/kernel-resources.html
shared_buffers = 128MB # 最小128kB(更改需要重新启动PG数据库)
#huge_pages = try # on, off, or try(更改需要重新启动PG数据库)
#temp_buffers = 8MB # 最小800kB
#max_prepared_transactions= 0 # 0-表示禁用该功能(更改需要重新启动PG数据库);注意:不建议将max_prepared_transactions设置为非零, 除非你打算用已经准备好的事务
#work_mem = 4MB # 最小64kB.可以限制用于排序内存的大小,该值在客户端连接之后可以增加,该类型分配使用的是"非共享内存"
#maintenance_work_mem = 64MB # 最小1MB
#autovacuum_work_mem = -1 # 最小1MB, or -1 to use maintenance_work_mem
#max_stack_depth = 2MB # 最小100kB
dynamic_shared_memory_type = posix #默认值是操作系统支持的第一个选项:posix,sysv,windows,mmap;使用none禁用动态共享内存
```
### <span style="font-size:15px">**3.2 磁盘(Disk)**</span>
```
#temp_file_limit = -1 # 每个进程的临时文件空间限制(以KB为单位).如果没有限制,则为-1
```
### <span style="font-size:15px">**3.3 内核资源(Kernel Resources)**</span>
```
#max_files_per_process = 1000 # 最小25(更改需要重新启动PG数据库)
```
### <span style="font-size:15px">**3.4 基于成本的真空延迟( Cost-Based Vacuum Delay)**</span>
```
#vacuum_cost_delay = 0 # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200 # 1-10000 credits
```
### <span style="font-size:15px">**3.5 后台写入(Background Writer)**</span>
```
#bgwriter_delay = 200ms # 10-10000ms between rounds
#bgwriter_lru_maxpages = 100 # max buffers written/round, 0 disables
#bgwriter_lru_multiplier = 2.0 # 0-10.0 multiplier on buffers scanned/round
#bgwriter_flush_after = 512kB # 以页计算,0-禁用
```
### <span style="font-size:15px">**3.6 异步行为(Asynchronous Behavior)**</span>
```
#effective_io_concurrency = 1 # 1-1000; 0-禁用预取
#max_worker_processes = 8 # (更改需要重新启动PG数据库生效)
#max_parallel_maintenance_workers = 2 # 取自max_parallel_workers
#max_parallel_workers_per_gather = 2 # 取自max_parallel_workers
#parallel_leader_participation = on
#max_parallel_workers = 8 # 可以在并行操作中使用的max_worker_processes的最大数量
#old_snapshot_threshold = -1 # 1min-60d; -1:禁用 0:立刻(更改需要重新启动PG数据库生效)
#backend_flush_after = 0 # 以页为单位测量,0-禁用
```
## <span style="font-size:15px">**4 预写日志(WRITE-AHEAD LOG)**</span>
### <span style="font-size:15px">**4.1 设置(Settings)**</span>
```
#wal_level = replica # 最小、副本或逻辑(更改需要重新启动PG数据库生效)
#fsync = on # 将数据刷新到磁盘以确保崩溃安全(关闭此功能可能导致不可恢复的数据损坏)
#synchronous_commit = on # 同步等级: off, local, remote_write, remote_apply, or on
#wal_sync_method = fsync # 默认是操作系统支持的第一个选项:open_datasync, fdatasync (Linux默认),fsync,fsync_writethrough,
open_sync
#full_page_writes = on # 从部分页面写恢复
#wal_compression = off # 启用整页写的压缩
#wal_log_hints = off # 也做整个页写的非关键的更新(更改需要重新启动PG数据库生效)
#用于控制缓存预写式日志数据的内存大小
#wal_buffers = -1 # 最小32kB, -1:基于shared_buffers的设置(更改需要重新启动PG数据库生效)
#wal_writer_delay = 200ms # 1-10000 milliseconds
#wal_writer_flush_after = 1MB # 以页计算, 0-禁用
#commit_delay = 0 # range 0-100000, 以微妙为单位
#commit_siblings = 5 # range 1-1000
```
### <span style="font-size:15px">**4.2 检查点(Checkpoints)**</span>
```
// 若用户的系统速度赶不上写数据的速度,则可以适当提高该值.默认为5分钟
#checkpoint_timeout = 5min # range 30s-1d
max_wal_size = 1GB
min_wal_size = 80MB
#checkpoint_completion_target = 0.5 # 检查点目标持续时间, 0.0 - 1.0
#checkpoint_flush_after = 256kB # 以页计算, 0-禁用
#checkpoint_warning = 30s # 0-禁用
```
### <span style="font-size:15px">**4.3 存档(Archiving)**</span>
```
#archive_mode = off # 启用存档-enables;关闭-off,打开-on 或始终-always (更改需要重新启动PG数据库生效)
#archive_command = '' # 用于存档日志文件段占位符的命令:%p =文件路径到存档;%f =文件名.e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
#archive_timeout = 0 # 在此秒数后强制执行日志文件段切换;0-禁用
```
## <span style="font-size:15px">**5 复制(REPLICATION)**</span>
### <span style="font-size:15px">**5.1 发送服务器(Sending Servers)**</span>
```
# 将它们设置在主服务器和任何将发送复制数据的备用服务器上.
#max_wal_senders = 10 # 最大walsender进程数.(更改需要重新启动PG数据库生效)
#wal_keep_segments = 0 # 在日志文件段中;0-禁用
#wal_sender_timeout = 60s # 以毫秒为单位;0-禁用
#max_replication_slots = 10 # 复制槽的最大数目(更改需要重新启动PG数据库生效)
#track_commit_timestamp = off # 收集事务提交的时间戳(更改需要重新启动PG数据库生效)
```
### <span style="font-size:15px">**5.2 主服务器(Master Server)**</span>
```
# 这些设置在备用服务器上被忽略.
#synchronous_standby_names = '' # 提供sync rep方法的备用服务器,用于选择同步备用服务器,
#同步备用服务器的数量和备用服务器中的application_name的逗号分隔列表;‘*’=all
#vacuum_defer_cleanup_age = 0 # 延迟清理的xact数
```
### <span style="font-size:15px">**5.3 备用服务器(Standby Servers)**</span>
```
# 在主服务器上忽略这些设置.
#hot_standby = on # "off"不允许在恢复期间进行查询(更改需要重新启动PG数据库生效)
#max_standby_archive_delay = 30s # 从存档读取wal时取消查询之前的最大延迟;-1允许无限延迟
#max_standby_streaming_delay = 30s # 读取流wal时取消查询之前的最大延迟;-1允许无限延迟
#wal_receiver_status_interval = 10s # 至少要经常回复 0-禁用
#hot_standby_feedback = off # 从备用服务器发送信息以防止查询冲突
#wal_receiver_timeout = 60s # 接收方等待主方通信的时间(毫秒);0-禁用
#wal_retrieve_retry_interval = 5s # 在尝试失败后重新尝试检索WAL之前,需要等待的时间
```
### <span style="font-size:15px">**5.4 订阅者(Subscribers)**</span>
```
# 在发布服务器上这些设置将被忽略
#max_logical_replication_workers = 4 # 取自max_worker_processes(更改需要重新启动PG数据库生效)
#max_sync_workers_per_subscription = 2 # 取自max_logical_replication_workers
```
## <span style="font-size:15px">**6 查询调优(QUERY TUNING)**</span>
### <span style="font-size:15px">**6.1 计划方法配置(Planner Method Configuration)**</span>
```
#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_parallel_append = on # 允许或禁止查询规划器使用并行追加计划类型。默认值是on
#enable_seqscan = on # 允许或禁止查询规划器使用顺序扫描计划类型。它不可能完全禁止顺序扫描,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on
#enable_sort = on # 允许或禁止查询规划器使用显式排序步骤。它不可能完全禁止显式排序,但是关闭这个变量将使得规划器尽可能优先使用其他方法。默认值是on
#enable_tidscan = on # 允许或禁止查询规划器使用TID扫描计划类型。默认值是on
#enable_partitionwise_join = off # 允许或者禁止查询规划器使用面向分区的连接,这使得分区表之间的连接以连接匹配的分区的方式来执行。 面向分区的连接当前只适用于连接条件包括所有分区键的情况,连接条件必须是相同的数据类型并且子分区集合要1对1匹配。 由于面向分区的连接规划在规划期间会使用可观的CPU时间和内存,所以默认值为off
#enable_partitionwise_aggregate = off # 允许或者禁止查询规划器使用面向分区的分组或聚集,这使得在分区表上的分组或聚集可以在每个分区上分别执行。如果GROUP BY子句不包括分区键,只有部分聚集能够以基于每个分区的方式执行,并且finalization必须最后执行。由于面向分区的分组或聚集在规划期间会使用可观的CPU时间和内存,所以默认值为off
#enable_parallel_hash = on # 允许或禁止查询规划器对并行哈希使用哈希连接计划类型。如果哈希连接计划也没有启用,这个参数没有效果。默认值是on
#enable_partition_pruning = on # 允许或者禁止查询规划器从查询计划中消除一个分区表的分区。这也控制着规划器产生允许执行器在查询执行期间移除(忽略)分区的查询计划的能力。默认值是on
```
### <span style="font-size:15px">**6.2 计划成本常量(Planner Cost Constants)**</span>
```
#seq_page_cost = 1.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。
#jit_above_cost = 100000 #如果可用,执行JIT编译并查询比这更昂贵的开销.-1:禁用
#jit_inline_above_cost = 500000 # 如果查询的开销大于此值,则内联小函数.-1:将禁用
#jit_optimize_above_cost = 500000 # 如果查询的开销大于此值,则使用昂贵的JIT优化;-1将禁用
#min_parallel_table_scan_size = 8MB # 为必须扫描的表数据量设置一个最小值,扫描的表数据量超过这一个值才会考虑使用并行扫描。 对于并行顺序扫描,被扫描的表数据量总是等于表的尺寸,但是在使用索引时,被扫描的表数据量通常会更小。 如果指定值时没有单位,则以块为单位,即`BLCKSZ`字节,通常为8kB。默认值是8兆字节(`8MB`)。
#min_parallel_index_scan_size = 512kB # 为必须扫描的索引数据量设置一个最小值,扫描的索引数据量超过这一个值时才会考虑使用并行扫描。 注意并行索引扫描通常并不会触及整个索引,它是规划器认为该扫描会实际用到的相关页面的数量。 这个参数还用于决定特定的索引是否参与并行vacuum。参见[VACUUM](http://postgres.cn/docs/13/sql-vacuum.html "VACUUM")。 如果指定值时没有单位,则以块为单位,即`BLCKSZ`字节,通常为8kB。默认值是512千字节(`512kB`)。
#effective_cache_size = 4GB #设置规划器对一个单一查询可用的有效磁盘缓冲区大小
```
### <span style="font-size:15px">**6.3 查询优化器(Genetic Query Optimizer)**</span>
```
#geqo = on
#geqo_threshold = 12
#geqo_effort = 5 # range 1-10
#geqo_pool_size = 0 # selects default based on effort
#geqo_generations = 0 # selects default based on effort
#geqo_selection_bias = 2.0 # range 1.5-2.0
#geqo_seed = 0.0 # range 0.0-1.0
```
### <span style="font-size:15px">**6.4 其他计划选项(Other Planner Options)**</span>
```
/* 备注:为了注释的属性简洁,这里的注释用了C/C++中的注释语法,若是postgresql.conf文件中,则应该用"#"号
* PostgreSQL根据数据库中每个表的统计情况来决定如何执行查询.这些信息通过“ANALYZE”或是“autovacuum”等
* 步骤来获得,任一情况下,在分析任务期间所获得的信息量由default_statistics_target设置. 加大该值会延长
* 分析时间.
*/
#default_statistics_target = 100 # range 1-10000
#constraint_exclusion = partition # on, off, or partition
#cursor_tuple_fraction = 0.1 # range 0.0-1.0
#from_collapse_limit = 8
#join_collapse_limit = 8 # 1:禁用显式联接子句的折叠
#force_parallel_mode = off
#jit = off
```
## <span style="font-size:15px">**7 报告和记录(REPORTING AND LOGGING)**</span>
### <span style="font-size:15px">**7.1 记录位置(Where to Log)**</span>
```
#log_destination = 'stderr' # 1有效值是stderr、csvlog、syslog和eventlog的组合,具体取决于平台.
#csvlog要求日志采集器处于打开状态.
# 这在登录到stderr时使用
#logging_collector = off # 启用将stderr和csvlog捕获到日志文件中.CSVLogs需要打开(更改需要重新启动PG数据库生效)
# 这些仅在logging_collector为on状态时候使用.
#log_directory = 'log' # 写入日志文件的目录,可以是绝对的,也可以是相对于PGDATA的
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 日志文件名模式,可以包含strftime()转义
#log_file_mode = 0600 # 日志文件的创建模式,从0开始使用八进制表示法
#log_truncate_on_rotation = off # 如果ON,与新日志文件具有相同名称的现有日志文件将被截断而不是附加到.但这种截断只发生在时间驱动的旋转上,
#而不是在重新启动或大小驱动的旋转上.默认为"关闭",意味着在所有情况下都追加到现有文件.
#log_rotation_age = 1d # 日志文件的自动循环将在该时间之后发生.0-禁用.
#log_rotation_size = 10MB # 日志文件的自动循环将在日志输出这么多之后发生.0-禁用
# These are relevant when logging to syslog:(登录到syslog时,这些都是相关的)
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'
#syslog_sequence_numbers = on
#syslog_split_messages = on
#:这仅在登录到eventlog(win32)时才相关(更改需要重新启动PG数据库生效)
#event_source = 'PostgreSQL'
```
### <span style="font-size:15px">**7.2 何时记录(When to Log)**</span>
```
#log_min_messages = warning # 按细节降序排列的值:
# debug5
# debug4
# debug3
# debug2
# debug1
# info
# notice
# warning
# error
# log
# fatal
# panic
#log_min_error_statement = error # 按细节降序排列的值:
# debug5
# debug4
# debug3
# debug2
# debug1
# info
# notice
# warning
# error
# log
# fatal
# panic (effectively off)
#log_min_duration_statement = -1 # -1被禁用,0记录所有语句及其持续时间,>0只记录至少运行此毫秒数的语句
```
### <span style="font-size:15px">**7.3 记录什么(What to Log)**</span>
```
#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default # terse, default, or verbose messages(简洁、默认或详细的消息)
#log_hostname = off
#log_line_prefix = '%m [%p] ' # 特素值:
# %a = application name-应用程序名称
# %u = user name-用户名
# %d = database name-数据库名称
# %r = remote host and port-远程主机和端口
# %h = remote host-远程主机
# %p = process ID-进程ID
# %t = timestamp without milliseconds-不带毫秒的时间戳
# %m = timestamp with milliseconds-毫秒时间戳
# %n = timestamp with milliseconds (as a Unix epoch)-时间戳(以毫秒计)(作为Unix纪元)
# %i = command tag-命令标记
# %e = SQL state-SQL状态
# %c = session ID-会话ID
# %l = session line number-会话行号
# %s = session start timestamp-会话开始时间戳
# %v = virtual transaction ID-虚拟事务ID
# %x = transaction ID (0 if none)-事务ID(如果没有,则为0)
# %q = stop here in non-session-processes -在非会话进程中此处停止
# %% = '%'
# e.g. '<%u%%%d> '
#log_lock_waits = off # 日志锁等待 >= deadlock_timeout
# log_statement可选值范围:none(不记录任何语句级的日志信息), ddl(只记录数据定义语言语句,如:CREATE,DROP),
# mod(记录修改了值的语句), all(记录每一条语句,不要轻易使用该选项,日志的写操作会对系统带来巨大的开销)
#log_statement = 'none' # none, ddl, mod, all
#log_replication_commands = off
#log_temp_files = -1 # 日志临时文件等于或大于指定的大小(以千字节为单位);-1禁用,0记录所有临时文件
log_timezone = 'PRC'
```
## <span style="font-size:15px">**8 流程标题(PROCESS TITLE)**</span>
```
#cluster_name = '' # 如果非空,则添加到进程标题(更改需要重新启动PG数据库生效)
#update_process_title = on
```
## <span style="font-size:15px">**9 统计数据(STATISTICS)**</span>
### <span style="font-size:15px">**9.1 查询和索引统计信息收集器(Query and Index Statistics Collector)**</span>
```
#track_activities = on
#track_counts = on
#track_io_timing = off
#track_functions = none # none, pl, all
#track_activity_query_size = 1024 # (change requires restart)
#stats_temp_directory = 'pg_stat_tmp'
```
### <span style="font-size:15px">**9.2 监控(Monitoring)**</span>
```
#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
#log_statement_stats = off
```
## <span style="font-size:15px">**10.0 自动清理(AUTOVACUUM)**</span>
```
//从PostgreSQL 8.1开始,便提供了autovacuum守护进程,在后台执行日志的自动清理功能.
#autovacuum = on #
#log_autovacuum_min_duration = -1 # -1 disables, 0 logs all actions and
# their durations, > 0 logs only
# actions running at least this number
# of milliseconds.
#autovacuum_max_workers = 3 # 自动清理的最大子进程数量(更改需重启PG数据库生效)
#autovacuum_naptime = 1min # time between autovacuum runs
#autovacuum_vacuum_threshold = 50 # 清理前的最小行更新数量
#autovacuum_analyze_threshold = 50 # 分析前的最小行更新数
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum
# (change requires restart)
#autovacuum_multixact_freeze_max_age = 400000000 # maximum multixact age
# before forced vacuum
# (change requires restart)
#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for
# autovacuum, in milliseconds;
# -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for
# autovacuum, -1 means use
# vacuum_cost_limit
```
## <span style="font-size:15px">**11 客户端连接默认值(CLIENT CONNECTION DEFAULTS)**</span>
### <span style="font-size:15px">**11.1 声明行为(Statement Behavior)**</span>
```
#client_min_messages = notice # 按细节降序排列的值:
# debug5
# debug4
# debug3
# debug2
# debug1
# log
# notice
# warning
# error
#search_path = '"$user", public' # schema names
#row_security = on
#default_tablespace = '' # a tablespace name, '' uses the default
#temp_tablespaces = '' # a list of tablespace names, '' uses
# only default tablespace
#check_function_bodies = on
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = off
#default_transaction_deferrable = off
#session_replication_role = 'origin'
#statement_timeout = 0 # in milliseconds, 0 is disabled
#lock_timeout = 0 # in milliseconds, 0 is disabled
#idle_in_transaction_session_timeout = 0 # in milliseconds, 0 is disabled
#vacuum_freeze_min_age = 50000000
#vacuum_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000
#vacuum_cleanup_index_scale_factor = 0.1 # fraction of total number of tuples
# before index cleanup, 0 always performs
# index cleanup
#bytea_output = 'hex' # hex, escape
#xmlbinary = 'base64'
#xmloption = 'content'
#gin_fuzzy_search_limit = 0
#gin_pending_list_limit = 4MB
```
### <span style="font-size:15px">**11.2 语言环境和格式(Locale and Formatting)**</span>
```
datestyle = 'iso, ymd'
#intervalstyle = 'postgres'
timezone = 'PRC'
#timezone_abbreviations = 'Default' # Select the set of available time zone
# abbreviations. Currently, there are
# Default
# Australia (historical usage)
# India
# You can create your own file in
# share/timezonesets/.
#extra_float_digits = 0 # min -15, max 3
#client_encoding = sql_ascii # actually, defaults to database
# encoding
# These settings are initialized by initdb, but they can be changed.
lc_messages = 'zh_CN.UTF-8' # locale for system error message
# strings
lc_monetary = 'zh_CN.UTF-8' # locale for monetary formatting
lc_numeric = 'zh_CN.UTF-8' # locale for number formatting
lc_time = 'zh_CN.UTF-8' # locale for time formatting
# default configuration for text search
default_text_search_config = 'pg_catalog.simple'
```
### <span style="font-size:15px">**11.3 共享库预加载(Shared Library Preloading)**</span>
```
#shared_preload_libraries = '' # (change requires restart)
#local_preload_libraries = ''
#session_preload_libraries = ''
#jit_provider = 'llvmjit' # JIT library to use
```
### <span style="font-size:15px">**11.4 其他默认值(Other Defaults )]**</span>
```
#dynamic_library_path = '$libdir'
```
## <span style="font-size:15px">**12 锁管理(LOCK MANAGEMENT)**</span>
```
#deadlock_timeout = 1s
#max_locks_per_transaction = 64 # min 10(更改需要重新启动PG数据库生效)
#max_pred_locks_per_transaction = 64 # min 10(更改需要重新启动PG数据库生效)
#max_pred_locks_per_relation = -2 # 负值平均值(max_pred_locks_per_transaction / -max_pred_locks_per_relation) - 1
#max_pred_locks_per_page = 2 # min 0
```
## <span style="font-size:15px">**13 版本和平台兼容性(VERSION AND PLATFORM COMPATIBILITY)**</span>
### <span style="font-size:15px">**13.1 以前的PostgreSQL版本(Previous PostgreSQL Versions)**</span>
```
#array_nulls = on
#backslash_quote = safe_encoding # on, off, or safe_encoding
#default_with_oids = off
#escape_string_warning = on
#lo_compat_privileges = off
#operator_precedence_warning = off
#quote_all_identifiers = off
#standard_conforming_strings = on
#synchronize_seqscans = on
```
### <span style="font-size:15px">**13.2 其他平台和客户(Other Platforms and Client)**</span>
```
#transform_null_equals = off
```
## <span style="font-size:15px">**14 错误处理(ERROR HANDLING)**</span>
```
#exit_on_error = off # 出现任何错误时终止会话?
#restart_after_crash = on # 后端崩溃后重新初始化?
#data_sync_retry = off # fsync数据失败时重试或死机?(更改需要重新启动PG数据库生效)
```
## <span style="font-size:15px">**15 配置文件包括(CONFIG FILE INCLUDES)**</span>
```
# 这些选项允许从默认postgresql.conf以外的文件加载设置.
#include_dir = '' # 包括目录中以".conf"结尾的文件,例如"conf.d"
#include_if_exists = '' # 仅在存在时才包含文件
#include = '' # 包含文件
```
## <span style="font-size:15px">**16 自定义选项**</span>
```
# Add settings for extensions here(在此处添加扩展设置)
```
- PHP
- PHP基础
- PHP介绍
- 如何理解PHP是弱类型语言
- 超全局变量
- $_SERVER详解
- 字符串处理函数
- 常用数组函数
- 文件处理函数
- 常用时间函数
- 日历函数
- 常用url处理函数
- 易混淆函数区别(面试题常见)
- 时间戳
- PHP进阶
- PSR规范
- RESTFUL规范
- 面向对象
- 三大基本特征和五大基本原则
- 访问权限
- static关键字
- static关键字
- 静态变量与普通变量
- 静态方法与普通方法
- const关键字
- final关键字
- abstract关键字
- self、$this、parent::关键字
- 接口(interface)
- trait关键字
- instanceof关键字
- 魔术方法
- 构造函数和析构函数
- 私有属性的设置获取
- __toString()方法
- __clone()方法
- __call()方法
- 类的自动加载
- 设计模式详解
- 关于设计模式的一些建议
- 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 区别和适用范围
- 策略模式
- 单例模式
- HTTP
- 定义
- 特点
- 工作过程
- request
- response
- HTTP状态码
- URL
- GET和POST的区别
- HTTPS
- session与cookie
- 排序算法
- 冒泡排序算法
- 二分查找算法
- 直接插入排序算法
- 希尔排序算法
- 选择排序算法
- 快速排序算法
- 循环算法
- 递归与尾递归
- 迭代
- 日期相关的类
- DateTimeInterface接口
- DateTime类
- DateTimeImmutable类
- DateInterval类
- DateTimeZone类
- DatePeriod类
- format参数格式
- DateInterval的format格式化参数
- 预定义接口
- ArrayAccess(数组式访问)接口
- Serializable (序列化)接口
- Traversable(遍历)接口
- Closure类
- Iterator(迭代器)接口
- IteratorAggregate(聚合迭代器) 接口
- Generator (生成器)接口
- composer
- composer安装与使用
- python
- python3执行tarfile解压文件报错:tarfile.ReadError:file could not be opened successfully
- golang
- 单元测试
- 单元测试框架
- Golang内置testing包
- GoConvey库
- testify库
- 打桩与mock
- GoMock框架
- Gomonkey框架
- HTTP Mock
- httpMock
- mux库/httptest
- 数据库
- MYSQL
- SQL语言的分类
- 事务(重点)
- 索引
- 存储过程
- 触发器
- 视图
- 导入导出数据库
- 优化mysql数据库的方法
- MyISAM与InnoDB区别
- 外连接、内连接的区别
- 物理文件结构
- PostgreSQL
- 编译安装
- pgsql常用命令
- pgsql应用目录(bin目录)文件结构解析
- pg_ctl
- initdb
- psql
- clusterdb
- cluster命令
- createdb
- dropdb
- createuser
- dropuser
- pg_config
- pg_controldata
- pg_checksums
- pgbench
- pg_basebackup
- pg_dump
- pg_dumpall
- pg_isready
- pg_receivewal
- pg_recvlogical
- pg_resetwal
- pg_restore
- pg_rewind
- pg_test_fsync
- pg_test_timing
- pg_upgrade
- pg_verifybackup
- pg_archivecleanup
- pg_waldump
- postgres
- reindexdb
- vacuumdb
- ecpg
- pgsql数据目录文件结构解析
- pgsql数据目录文件结构解析
- postgresql.conf解析
- pgsql系统配置参数说明
- pgsql索引类型
- 四种索引类型解析
- 索引之ctid解析
- 索引相关操作
- pgsql函数解析
- pgsql系统函数解析
- pgsql窗口函数解析
- pgsql聚合函数解析
- pgsql系统表解析
- pg_stat_all_indexes
- pg_stat_all_tables
- pg_statio_all_indexes
- pg_statio_all_tables
- pg_stat_database
- pg_stat_statements
- pg_extension
- pg_available_extensions
- pg_available_extension_versions
- pgsql基本原理
- 进程和内存结构
- 存储结构
- 数据文件的内部结构
- 垃圾回收机制VACUUM
- 事务日志WAL
- 并发控制
- 介绍
- 事务ID-txid
- 元组结构-Tuple Structure
- 事务状态记录-Commit Log (clog)
- 事务快照-Transaction Snapshot
- 事务快照实例
- 事务隔离
- 事务隔离级别
- 读已提交-Read committed
- 可重复读-Repeatable read
- 可序列化-Serializable
- 读未提交-Read uncommitted
- 锁机制
- 扩展机制解析
- 扩展的定义
- 扩展的安装方式
- 自定义创建扩展
- 扩展的管理
- 扩展使用实例
- 在pgsql中使用last、first聚合函数
- pgsql模糊查询不走索引的解决方案
- pgsql的pg_trgm扩展解析与验证
- 高可用
- LNMP
- LNMP环境搭建
- 一键安装包
- 搭建方法
- 配置文件目录
- 服务器管理系统
- 宝塔(Linux)
- 安装与使用
- 开放API
- 自定义apache日志
- 一键安装包LNMP1.5
- LNMP1.5:添加、删除站点
- LNMP1.5:php多版本切换
- LNMP1.5 部署 thinkphp项目
- Operation not permitted解决方法
- Nginx
- Nginx的产生
- 正向代理和反向代理
- 负载均衡
- Linux常用命令
- 目录与文件相关命令
- 目录操作命令
- 文件编辑命令
- 文件查看命令
- 文件查找命令
- 文件权限命令
- 文件上传下载命令
- 用户和群组相关命令
- 用户与用户组的关系
- 用户相关的系统配置文件
- 用户相关命令
- 用户组相关命令
- 压缩与解压相关命令
- .zip格式
- .tar.gz格式
- .gz格式
- .bz2格式
- 查看系统版本
- cpuinfo详解
- meminfo详解
- getconf获取系统信息
- 磁盘空间相关命令
- 查看系统负载情况
- 系统环境变量
- 网络相关命令
- ip命令详解
- ip命令格式详解
- ip address命令详解
- ip link命令详解
- ip rule命令详解
- ip route命令详解
- nslookup命令详解
- traceroute命令详解
- netstat命令详解
- route命令详解
- tcpdump命令详解
- 系统进程相关命令
- ps命令详解
- pstree命令详解
- kill命令详解
- 守护进程-supervisord
- 性能监控相关命令
- top命令详解
- iostat命令详解
- pidstat命令详解
- iotop命令详解
- mpstat命令详解
- vmstat命令详解
- ifstat命令详解
- sar命令详解
- iftop命令详解
- 定时任务相关命令
- ssh登录远程主机
- ssh口令登录
- ssh公钥登录
- ssh带密码登录
- ssh端口映射
- ssh配置文件
- ssh安全设置
- 历史纪录
- history命令详解
- linux开启操作日志记录
- 拓展
- git
- git初始化本地仓库-https
- git初始化仓库-ssh
- git-查看和设置config配置
- docker
- 概念
- docker原理
- docker镜像原理
- docker Overlay2 文件系统原理
- docker日志原理
- docker日志驱动
- docker容器日志管理
- 原理论证
- 验证容器的启动是作为Docker Daemon的子进程
- 验证syslog类型日志驱动
- 验证journald类型日志驱动
- 验证local类型日志驱动
- 修改容器的hostname
- 修改容器的hosts
- 验证联合挂载技术
- 验证启动多个容器对于磁盘的占用情况
- 验证写时复制原理
- 验证docker内容寻址原理
- docker存储目录
- /var/lib/docker目录
- image目录
- overlay2目录
- 数据卷
- 具名挂载和匿名挂载
- 数据卷容器
- Dockerfile详解
- dockerfile指令详解
- 实例:构造centos
- 实例:CMD和ENTRYPOINT的区别
- docker网络详解
- docker-compose
- 缓存
- redis
- redis的数据类型和应用场景
- redis持久化
- RDB持久化
- AOF持久化
- redis缓存穿透、缓存击穿、缓存雪崩
- 常见网络攻击类型
- CSRF攻击
- XSS攻击
- SQL注入
- Cookie攻击
- 历史项目经验
- 图片上传项目实例
- 原生php上传方法实例
- base64图片流
- tp5的上传方法封装实例
- 多级关系的递归查询
- 数组转树结构
- thinkphp5.1+ajax实现导出Excel
- JS 删除数组的某一项
- 判断是否为索引数组
- ip操作