[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操作