PostgreSql 配置文件参数设置

一、操作系统配置

1.修改postgres用户的limits.conf限制

cat >> /etc/security/limits.conf << EOF
# add for postgres
postgres soft nproc 65536
postgres hard nproc 65536
postgres soft nofile 278528
postgres hard nofile 278528
postgres soft stack unlimited
postgres soft core unlimited
postgres hard core unlimited
postgres soft memlock 250000000
postgres hard memlock 250000000
EOF

2.修改OS内核参数/etc/sysctl.conf

cat >> /etc/sysctl.conf << EOF
# add for postgres
kernel.shmmax=137438953472 137438953472
kernel.shmall=53689091
kernel.shmmni=4096
kernel.msgmnb=4203520
kernel.msgmax=65536
kernel.msgmni=32768
kernel.sem=501000 641280000 501000 12800
fs.aio-max-nr=6553600
fs.file-max=26289810
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_default=8388608
net.core.wmem_max=16777216
net.core.netdev_max_backlog=262144
net.core.somaxconn=65535
net.ipv4.tcp_rmem=8192 87380 16777216
net.ipv4.tcp_wmem=8192 65536 16777216
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_keepalive_time=180
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_tw_buckets=256000
net.ipv4.tcp_retries1=2
net.ipv4.tcp_retries2=3
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=6000
vm.dirty_writeback_centisecs=500
vm.dirty_ratio=20
vm.overcommit_memory=0
vm.overcommit_ratio=120
vm.vfs_cache_pressure=100
vm.swappiness=10
vm.drop_caches=2
vm.min_free_kbytes=2048000
vm.zone_reclaim_mode=0
kernel.core_uses_pid=1
kernel.core_pattern=core-%e-%p-%s-%t
fs.suid_dumpable=1
kernel.sysrq=0
EOF

# 让配置生效
sysctl -p

二、 postgresql.conf 配置文件

如下通用配置模板,根据实际环境更改port、 shared_buffers、effective_cache_size、 log_directory 、archive_command几个参数即可使用。

#connection control
listen_addresses = '*'
port = 5432                  #修改实际的访问端口,默认5432
max_connections = 5000
superuser_reserved_connections = 5  #留给超级用户使用     
tcp_keepalives_idle = 60               
tcp_keepalives_interval = 10         
tcp_keepalives_count = 10        
password_encryption = md5      
#memory management      
shared_buffers = 32GB    #推荐操作系统物理内存的25%~50%             
max_prepared_transactions = 2000              
work_mem = 64MB         #影响排序等操作                 
maintenance_work_mem = 2GB            
autovacuum_work_mem = 1GB             
dynamic_shared_memory_type = posix      
max_files_per_process = 24800           
effective_cache_size = 32GB   #推荐操作系统物理内存的50%~100%
#write optimization
bgwriter_delay = 10ms                   
bgwriter_lru_maxpages = 1000            
bgwriter_lru_multiplier = 10.0          
bgwriter_flush_after = 512kB           
effective_io_concurrency = 0          
max_worker_processes = 256             
max_parallel_maintenance_workers = 6   
max_parallel_workers_per_gather = 0     
max_parallel_workers = 28              
#wal optimization
synchronous_commit = remote_write      
full_page_writes = on                 
wal_compression = on                   
wal_writer_delay = 10ms                
wal_writer_flush_after = 1MB           
commit_delay = 10                  
commit_siblings = 5                  
checkpoint_timeout = 15min           
max_wal_size = 32GB
min_wal_size = 16GB
archive_mode = on
archive_command = 'test ! -f /data/postgres/archive/%f && cp %p /data/postgres/archive/%f'
max_wal_senders = 10           #大于流复制从库的数量         
wal_keep_segments = 100              
wal_sender_timeout = 60s        
max_replication_slots = 64      
hot_standby_feedback = off            
#log optimization
log_destination = 'csvlog'             
logging_collector = on          
log_directory = '/data/postgres/pg_log'        # 日志存放路径,提前规划在系统上创建好
log_filename = 'postgresql-%a.log'
log_file_mode = 0600     
log_truncate_on_rotation = on       
log_rotation_age = 1d                 
log_rotation_size = 1GB        
#audit settings
log_min_duration_statement = 5s     
log_checkpoints = on
log_connections = on
log_disconnections = on
log_error_verbosity = verbose         
log_line_prefix = '%m [%p] %q %u %d %a %r %e '       
log_statement = 'ddl'                  
log_timezone = 'PRC'
track_io_timing = on
track_activity_query_size = 2048
#autovacuum                      
vacuum_cost_delay = 0                   
old_snapshot_threshold = 6h            
log_autovacuum_min_duration = 0         
autovacuum = on
autovacuum_analyze_scale_factor = '0.01'
autovacuum_analyze_threshold = '1000'
autovacuum_max_workers = '4'
autovacuum_naptime = '1min'
autovacuum_vacuum_cost_delay = '10ms'
autovacuum_vacuum_cost_limit = '4000'
autovacuum_vacuum_scale_factor = '0.01'
autovacuum_vacuum_threshold = '1000'
autovacuum_work_mem = '2GB'   
#system environment
datestyle = 'iso, mdy'
timezone = 'Asia/Shanghai'
lc_messages = 'en_US.utf8'     
lc_monetary = 'en_US.utf8'     
lc_numeric = 'en_US.utf8'      
lc_time = 'en_US.utf8'         
default_text_search_config = 'pg_catalog.english'

参数说明

【连接设置】

listen_addresses:指定服务器在哪些 TCP/IP 地址上监听客户端连接,默认值是localhost,只允许本地连接。
max_connections:决定数据库的最大并发连接数,默认值通常是 100 个连接,如果内核设置不支持(initdb时决定),可能会比这个数少。
superuser_reserved_connections:为超级用户保留的连接数,默认是 3,不能小于 max_connections。

【内存设置】

shared_buffers:数据库服务器将使用的共享内存,默认通常是 128M,如果内核设置不支持(initdb时决定),那么可以会更少。 这个设置必须至少为 128 千字节。shared_buffers推荐值是系统内存的 25%。因为PostgreSQL同样依赖操作系统的高速缓冲区,将shared_buffers设置为超过系统内存40%,可能会造成更高的负载。
max_prepared_transactions:设置可以同时处于“prepared”状态的事务的最大数目把这个参数设置 为零(这是默认设置)将禁用预备事务特性。若要使用预备事务,max_prepared_transactions 至少设置为同 max_connections 一样大。
work_mem:单个查询操作(例如排序或哈希表)可使用的最大内存,默认值是 4MB,ORDER BY、DISTINCT和归并连接都要用到排序操作,哈希连接、基于哈希的聚集以及基于哈希的IN子查询处理中都要用到哈希表。
maintenance_work_mem:维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)中使用的最大的内存,其默认值是64M, 更大的设置可以改进清理和恢复数据库转储的性能。
autovacuum_work_mem:每个自动清理工作者进程能使用的最大内存量,其默认值为 -1,表示转而使用 maintenance_work_mem 的值。建议单独分配,因为 maintenance_work_mem 分配的资源建索引等操作也会使用。
dynamic_shared_memory_type:服务器使用的内存管理方式。可能的值是posix(用于使用 shm_open分配的 POSIX 共享内存)、sysv (用于通过shmget分配的 System V 共享内存)、 windows(用于 Windows 共享内存)、和mmap (使用存储在数据目录中的内存映射文件模拟共享内存)。并非所有平台上都支持所有值,平台上第一个支持的选项就是其默认值。 在任何平台上mmap选项都不是默认值,通常不鼓励使用它,因为操作系统会 反复地把修改过的页面写回到磁盘上,从而增加了系统的I/O负载。不过当 pg_dynshmem目录被存储在一个 RAM 盘时或者没有其他共享内存功能可用时, 它还是有用的。
effective_cache_size:规划器对一个单一查询可用的有效磁盘缓冲区的预估大小,更高的数值会使得索引扫描更可能被使用,更低的数值会使得顺序扫描更可能被使用。这个参数对PostgreSQL分配的共享内存尺寸没有影响,它也不会保留内核磁盘缓冲,它只用于估计的目的,默认值是 4GB,推荐值是系统内存的 50%或更大。

【IO设置】

bgwriter_delay:后台写入器活动轮次之间的延迟。在每个轮次中,写入器都会为一定数量的脏缓冲区发出写操作,之后它就休眠 bgwriter_delay 的时长, 然后重复动作。当缓冲池中没有脏缓冲区时,不管 bgwriter_delay,它都会进入更长的休眠,默认值是 200ms。
bgwriter_lru_maxpages:在每个轮次中,不超过这么多个缓冲区将被后台写入器写出,把这个参数设置为零可禁用后台写出,默认值是 100 个缓冲区。
bgwriter_lru_multiplier:最近所需缓冲区的平均值乘以 bgwriter_lru_multiplier可以估算下一轮次中将会需要的缓冲区数目。脏缓冲区将被写出直到有很多干净可重用的缓冲区(然而,每一轮次中写出的缓冲区数不超过 bgwriter_lru_maxpages)。 因此,设置为 1.0 表示一种“刚刚好的”策略,这种策略会写出正好符合预测值的数目的缓冲区,更大大的值可以为需求高峰提供某种缓冲,默认值是 2.0。
effective_io_concurrency:设置了该值,磁盘的预读会失效,顺序扫描和索引扫描都可以利用磁盘预读,建议关闭,默认值为 1。
max_worker_processes:系统能够支持的后台进程的最大数量,默认值为 8。在更改这个值时,考虑也对 max_parallel_workers、max_parallel_maintenance_workers、max_parallel_workers_per_gather 进行调整。
max_parallel_workers:设置系统支持的最大并行数量,默认值为8,要注意将这个值设置得大于 max_worker_processes 将不会产生效果,因为并行工作者进程都是从 max_worker_processes 所建立的工作者进程池中取出来的。
max_parallel_maintenance_workers:单一工具性命令能够启动的最大并行数。当前支持使用并行工作者的工具性命令是 CREATE INDEX,并且只有在构建B-树索引时才能并行,并且 VACUUM 没有 FULL选项。并行工作者从由 max_worker_processes 创建的进程池中取出,数量由max_parallel_workers控制,默认值为2。
max_parallel_workers_per_gather:设置允许的最大并行查询数,并行查询可能消耗比非并行查询更多的资源,把这个值设置为0将会禁用并行查询执行,默认值是2。
wal_compression:当这个参数为on时,如果 full_page_writes 为打开(默认值打开)或者处于基础备份期间,PostgreSQL服务器 会压缩写入到 WAL 中的完整页面镜像。压缩页面镜像将在 WAL 重放时 被解压。默认值为off。只有超级用户可以更改这个设置,打开这个参数可以减小 WAL 所占的空间且无需承受不可恢复的数据损坏风险, 但是代价是需要额外的 CPU 开销以便在 WAL 记录期间进行压缩以及在 WAL 重放时解压。
wal_writer_delay:指定 WAL 写入器刷写 WAL 的频繁程度,以时间为单位。 在刷写WAL之后,写入器将根据 wal_writer_delay所给出的时间长度进行睡眠,除非被一个异步提交的事务提前唤醒。 如果最近的刷写发生在 wal_writer_delay 之前,并且小于 wal_writer_flush_after WAL的值产生之后,那么WAL只会被写入操作系统,而不会被刷写到磁盘,默认值是 200ms。
commit_delay:在一次 WAL 刷写被发起之前,commit_delay 增加一个时间延迟。 如果系统负载足够高,使得在一个给定间隔内有额外的事务准备好提交,那么通过允许更多事务通过一个单次 WAL 刷写来提交能够提高组提交的吞吐量。 但是,它也把每次 WAL 刷写的潜伏期增加到了最多 commit_delay。 因为如果没有其他事务准备好提交,就会浪费一次延迟,只有在当一次刷写将要被发起时有至少 commit_siblings(默认是5个)个其他活动事务时,才会执行一次延迟。 另外,如果fsync被禁用,则将不会执行任何延迟。
checkpoint_timeout:自动 WAL 检查点之间的最长时间,合理的范围在 30 秒到 1 天之间,默认是 5min。增加这个参数的值会增加崩溃恢复所需的时间。
max_wal_size:在自动 WAL 检查点之间允许 WAL 增长到的最大尺寸。这是一个软限制,在特殊的情况下 WAL 尺寸可能会超过max_wal_size, 例如在重度负荷下、archive_command失败或者高的 wal_keep_size设置,默认为 1 GB。增加这个参数可能导致崩溃恢复所需的时间。
min_wal_size:只要 WAL 磁盘用量保持在这个设置之下,在检查点时旧的 WAL 文件总是 被回收以便未来使用,而不是直接被删除。这可以被用来确保有足够的 WAL 空间被保留来应付 WAL 使用的高峰,例如运行大型的批处理任务。 如果指定值时没有单位,则以兆字节为单位,默认是 80 MB。
archive_mode:当启用archive_mode时,可以通过设置 archive_command命令将完成的 WAL 段发送到归档存储。除用于禁用的off之外,还有两种模式:on 和 always。在普通操作期间,这两种模式之间没有区别,但是当设置为 always 时,WAL 归档器在归档恢复或者后备模式下也会被启用。在 always 模式下,所有从归档恢复 的或者用流复制传来的文件将被(再次)归档。当wal_level被设置为minimal时,archive_mode不能被启用。
max_replication_slots:服务器可以支持的复制槽最大数量,默认值为10。将它设置为一个比当前已有复制槽要少的值会阻碍服务器启动。此外,要允许使用复制槽,wal_level必须被设置为 replica或更高。
synchronous_commit 参数说明:
有 on、off、local、remote_write、remote_apply 5个选项。
单实例环境:
on:当数据库提交事务时,wal先写入 wal buffer 再写入 wal 日志文件,设置成on表示提交事务时需等待本地wal写入wal日志后才向客户端返回成功。on 为默认设置,数据库非常安全,但性能有所损耗。
local:local含义和on类似,表示提交事务时需要等待本地wal写入后才向客户端返回成功。
off:当数据库提交事务时不需要等待本地 wal buffer 写入 wal 日志,随即向客户端返回成功,设置成 off会给数据库带来一点风险:数据库宕机时最新提交的少量事务可能丢失,数据库重启后会认为这些事务异常终止,会rollback。适用对数据库准确性要求不高同时追求数据库性能的的场景。
流复制环境:
on:表示流复制主库提交事务时,需等待备库接收主库发送的wal日志流并写入wal文件,之后才向客户端返回成功,简单的说on表示本地wal已落盘,备库的wal也已落盘,有两份持久化的wal,但备库此时还没有完成重做。这个选项带来的事务响应时间较高。
remote_write:表示流复制主库提交事务时,需等待备库接收主库发送的wal日志流并写入备节点操作系统缓存中,之后向客户端返回成功,这种情况下备库出现异常关闭时不会有已传送的wal日志丢失风险,但备库操作系统异常宕机就有已传送的wal丢失风险了,此时wal可能还没有完全写入备节点wal文件中,简单的说 remote_write 表示本地wal已落盘,备库的wal还在备库操作系统缓存中,也就是说只有一份持久化的wal。这个选项带来的事务响应时间较低。
remote_apply:表示流复制主库提交事务时,需等待备库接收主库发送的wal流并写入wal文件,同时备库已经完成重做,之后才向客户端返回成功,简单的说remote_apply 表示本地wal已落盘,备库wal已落盘并且已经完成重做,这个设置保证了拥有两份持久化的wal,同时备库也已经完成了重做。这个选项带来的事务响应时间最高。

【日志设置】

log_destination:有三种输出方法,stderr,csvlog,syslog;在windows上还支持eventlog。默认是stderr,如果使用csvlog的话,logging_collector必须开启。也可以同时使用csvlog和stderr,会记录两种格式的日志。
logging_collector:日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中,默认是OFF。
log_directory:日志保存路径,当logging_collector被启用时,这个参数决定日志文件将被在哪个目录下创建。
log_filename:日志名格式,默认是postgresql-%Y-%m-%d_%H%M%S.log。
log_file_mode:默认的权限是0600,表示只有服务器拥有者才能读取或写入日志文件。其他常用的设置是0640,它允许拥有者的组成员读取文件。不过要注意你需要修改log_directory为将文件存储在集簇数据目录之外的某个位置,才能利用这个设置。在任何情况下,让日志文件变成任何人都可读是不明智的,因为日志文件中可能包含敏感数据。
log_truncate_on_rotation:当logging_collector被启用时,这个参数将导致 PostgreSQL截断(覆盖而不是追加)任何已有的同名日志文件。不过,截断只在一个新文件由于基于时间的轮转被打开时发生,在基于尺寸的轮转时不会发生。如果被关闭,在所有情况下以前存在的文件将被追加。
log_rotation_age:当logging_collector被启用时,这个参数决定使用一个单个日志文件的最大时间量,之后将创立一个新的日志文件,默认为24小时。 将这个参数设置为零将禁用基于时间的新日志文件创建。
log_rotation_size:当logging_collector被启用时,这个参数决定一个个体日志文件的最大尺寸。当这些数据量被发送到一个日志文件后,将创建一个新的日志文件,默认值是10M。设置为零时将禁用基于大小创建新的日志文件。
log_min_duration_statement:记录慢 sql 的时间阀值,超过这个时间的 sql 将会被记录到日志中,默认值为 -1,不记录慢sql。
log_checkpoints:控制检查点和重启点是否被记录在服务器日志中,一些统计信息也被包括在日志消息中,包括写入缓冲区的数据和写它们所花的时间,默认值是关闭。
log_connections:控制连接信息是否被记录,尝试对服务器的连接被记录,客户端认证的成功完成也会被记录,在会话中它不能被更改,默认为off。
log_disconnections:控制会话终止是否被记录。日志输出提供的信息类似于 log_connections,不过还外加会话的持续时间,在会话中它不能被更改,默认为off。
log_error_verbosity:有效值是TERSE、DEFAULT和VERBOSE。TERSE排除记录DETAIL、HINT、QUERY和CONTEXT错误信息。VERBOSE输出包括SQLSTATE错误码以及产生错误的源代码文件名、函数名和行号。 默认是 DEFAULT。
log_line_prefix:设置日志中几率哪些内容,默认值是’%m [%p] ',记录时间戳和进程ID。
log_statement:控制哪些 SQL 语句被记录。有效值是 none (off)、ddl、mod和 all(所有语句),mod记录所有ddl语句,外加数据修改语句例如INSERT, UPDATE、DELETE、TRUNCATE, 和COPY FROM。 如果PREPARE、EXECUTE和 EXPLAIN ANALYZE包含合适类型的命令,它们也会被记录。默认是 none。
log_timezone:设置在服务器日志中写入的时间戳的时区,默认值是GMT。

【autovacuum 设置】

autovacuum:控制服务器是否运行自动清理启动器后台进程。默认为开启,不过要自动清理正常工作还需要启用 track_counts(默认启用)。 该参数只能在postgresql.conf文件或服务器命令行中设置,通过更改表存储参数可以为表禁用自动清理。 注意即使该参数被禁用,系统也会在需要防止事务ID回卷时发起清理进程。
old_snapshot_threshold:设置可以使用查询快照的最小时间,以规避使用快照时出现“snapshot too old” 错误的风险,超过此阈值时间的数据将可以被清除,这可以有助于阻止长时间使用的快照造成的快照膨胀,默认值为 -1(禁用此功能),实际上将快照的时限设置为无穷大。
log_autovacuum_min_duration:超过这个时间阀值的自动清理动作都会被日志记录,将该参数设置为0会记录所有的自动清理动作,默认值为 -1 (禁用对自动清理动作的记录)。 此外,当该参数被设置为除-1外的任何值时, 如果一个自动清理动作由于一个锁冲突或者被并发删除的关系而被跳过,将会为此记录一个消息。 开启这个参数对于追踪自动清理活动非常有用,但是可以通过更改表的存储 参数为个别表覆盖这个设置。
autovacuum_max_workers:设置能同时运行的自动清理进程(除了自动清理启动器之外)的最大数量,默认值为3。
autovacuum_vacuum_scale_factor:触发 vacuum 自动清理操作的 dml 比例,默认值 0.2,当表上的 dml 操作占据表数据量的 20% 时触发 vacuum 自动清理操作,为防止数据量较小的表被频繁清理,与 autovacuum_vacuum_threshold(改参数默认值为 50,表中至少有 50 条数据发成 dml 操作时,才会触发 vacuum 自动清理) 参数共同作用。
autovacuum_analyze_scale_factor:触发 vacuum 自动 analyze 操作的 dml 比例,默认值 0.1,当表上的 dml 操作占据表数据量的 10% 时触发 vacuum 自动 analyze 操作,为防止数据量较小的表被频繁 analyze,与 autovacuum_analyze_threshold(改参数默认值为 50,表中至少有 50 条数据发成 dml 操作时,才会触发 vacuum 自动 analyze) 参数共同作用。
autovacuum_freeze_max_age:某表的pg_class.relfrozenxid的最大值,如果超出此值则重置xid,默认值为2亿,注意即便自动清理被禁用,系统也将发起自动清理进程来阻止回卷。
autovacuum_multixact_freeze_max_age:某表的pg_class.relminmxid最大值,如果超出此值则重置xid,默认值为4亿,注意即便自动清理被禁用,系统也将发起自动清理进程来阻止回卷。
autovacuum_vacuum_cost_delay:指定用于自动 VACUUM 操作中的代价延迟值,如果指定-1(默认值),则使用 vacuum_cost_delay 值(默认值 2ms)。
补充说明
由于生产环境中每张业务表作用、使用频繁程度、“死元组”的增长速度等都不同,建议结合业务情况,对重要的生产业务表单独进行设置参数值。
dml 操作特别频繁的表,做类似如下设置:
ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.01);
索引字段,dml 操作特别频繁的表,做类似如下设置:
ALTER TABLE mytable SET (fillfactor=80);
仅插入数据库表,做类似如下设置:
ALTER TABLE mytable SET (autovacuum_freeze_max_age = 10000000);

【系统环境设置】

datestyle:设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。由于历史原因, 这个变量包含两个独立的部分:输出格式声明(ISO、Postgres、SQL或German)、 输入/输出的年/月/日顺序(DMY、MDY或YMD)。这些可以被独立设置或者一起设置。关键字Euro和European是DMY的同义词;关键字US、NonEuro和NonEuropean是MDY的同义词。内建默认值是ISO, MDY,但是initdb将用对应于选中的lc_time区域行为的设置初始化配置文件。
timezone:设置用于显示和解释时间戳的时区。内建默认值是GMT,但是它通常会在postgresql.conf中被覆盖;initdb将安装一个对应于其系统环境的设置。
lc_messages:设置消息显示的语言。可接受的值是系统相关的,如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
在一些系统上,这个区域分类并不存在。仍然可以设置这个变量,只是不会有任何效果。同样,所期望语言的翻译消息也可能不存在。在这种情况下,你将仍然继续看到英文消息。
只有超级用户可以改变这个设置。因为它同时影响发送到服务器日志和客户端的消息。一个不正确的值可能会降低服务器日志的可读性。
lc_monetary:设置用于格式化货币量的区域,例如用to_char函数族。可接受的值是系统相关的,如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
lc_numeric:设置用于格式化数字的区域,例如用to_char函数族。可接受的值是系统相关的,如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
lc_time:设置用于格式化日期和时间的区域,例如用to_char函数族。可接受的值是系统相关的,如果这个变量被设置为空字符串(默认),那么该值将以一种系统相关的方式从服务器的执行环境中继承。
default_text_search_config:选择被那些没有显式参数指定配置的文本搜索函数变体使用的文本搜索配置,内建默认值是pg_catalog.simple,但是如果能够标识一个匹配区域的配置,initdb将用对应于选中的lc_ctype区域的设置初始化配置文件。

三、 pg_hba.conf 配置文件

负责控制外部的客户端认证(也就是控制哪些IP允许访问),HBA的意思是"host-based authentication", 也就是基于主机的认证。在initdb初始化数据目录的时候, 它会安装一个缺省的pg_hba.conf文件。pg_hba.conf文件可以说是数据库实例的“防火墙”,如下

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.

【TYPE】

连接方式有四种:local 、host、hostssl、hostnossl

local:这条记录匹配通过 Unix 域套接字进行的联接企图, 没有这种类型的记录,就不允许 Unix 域套接字的联接。
host:这条记录匹配通过TCP/IP网络进行的联接尝试。他既匹配通过ssl方式的连接,也匹配通过非ssl方式的连接。注意:要使用该选项你要在postgresql.conf文件里设置listen_address选项,不在listen_address里的IP地址是无法匹配到的。因为默认的行为是只在localhost上监听本地连接。
hostssl:这条记录匹配通过在TCP/IP上进行的SSL联接企图。
要使用该选项,服务器编译时必须使用–with-openssl选项,并且在服务器启动时ssl设置是打开的,具体内容可见这里。
hostnossl:这个和上面的hostssl相反,只匹配通过在TCP/IP上进行的非SSL联接企图。

【DATABASE】

指定数据库,多个数据库以逗号分隔。
all 表示可以匹配任何数据库;
replication 表示允许流复制连接,而不是允许连接到一个名为“replication”的数据库上。

【USER】

指定这一记录匹配的数据库角色名。值all指定它匹配所有角色。如果指定的角色是一个组并且希望该组中的所有成员都被包括在内,在该角色名前面放一个+。可以提供多个角色名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有角色名的单独的文件。

【ADDRESS】

指定这一记录匹配的客户端机器的IP地址范围,它包含一个标准点分十进制表示的IP地址和一个CIDR掩码长度。IP地址只能用数字指定,不能写成域或者主机名;掩码长度指示客户端IP地址必须匹配的高位位数;IP地址、/和CIDR掩码长度之间不能有任何空格。

典型的这种方式指定的IP地址范围举例:
  172.20.143.89/32    表示一个主机 
  172.20.143.0/24      表示一个小子网  (172.20.143.0 - 172.20.143.255)
  172.20.0.0/16     表示一个大子网  (172.20.0.0     - 172.20.255.255)
  0.0.0.0/0        表示所有IPv4地址
  ::/0        表示所有IPv6地址

要声明单个主机,给 IPv4 地址声明 CIDR 掩码 32 ,给 IPv6 地址声明 128。

【METHOD】

trust:无条件地允许联接,这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。
reject:联接无条件拒绝,常用于从一个组中"过滤"某些主机。
md5:要求客户端提供一个 MD5 加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。
password:和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。

举例:

host    all             all          10.21.10.105/32      md5    #允许用户连接访问
host    replication     replica      10.21.10.0/24        md5    #流复制用户访问

参考:

https://blog.csdn.net/songyundong1993/article/details/121038380

https://blog.csdn.net/hmxz2nn/article/details/83717663

你可能感兴趣的:(postgresql,数据库)