PostgreSQL系列- 5 - 配置文件详解

目录

一、配置文件位置

二、配置文件用途

三、配置文件详解

1、postgresql.conf

1.1、连接和认证

1.2、资源配置

1.3、预写式日志 (Write-Ahead Logging)

1.4、复制

1.5、查询规划

1.6、错误和日志

1.7、统计数据

1.8、自动清理

1.9、客户端连接

1.10、锁管理

1.11、错误处理

1.12、配置加载

2、pg_hba.conf

3、pg_ident.conf

四、参考


一、配置文件位置

1、一般放置在安装时指定的数据目录中,如果想修改,可通过 postgresql.conf 配置文件指定

data_directory = '/mnt/data/postgresdb/data'        # use data in another directory
#hba_file = 'ConfigDir/pg_hba.conf'    # host-based authentication file
#ident_file = 'ConfigDir/pg_ident.conf'    # ident configuration file
 

二、配置文件用途

1、postgresql 系统可通过手动配置的文件分为3部分

主服务器配置文件:postgresql.conf

基于主机认证配置文件:pg_hba.conf

用于用户名称映射的配置文件:pg_ident.conf

三、配置文件详解

以下是对默认配置文件内容进行解释,内容参考官方文档说明,后续也会给出用于生产的配置文件实例。

1、postgresql.conf

1.1、连接和认证

listen_addresses = '*'                                #监听客户端连接 
port = 5432                                                # 端口配置
max_connections = 1000                            # 允许数据库的最大并发连接数,默认100
#superuser_reserved_connections = 3    # 预留给超级用户的连接池数,默认3
#unix_socket_directories = '/tmp'            # 用于监听来自客户端连接的 Unix 域套接字目录
#unix_socket_group = ''                            # Unix域套接字所属组
#unix_socket_permissions = 0777           # Unix 域套接字的访问权限
#tcp_keepalives_idle = 0                        # 在操作系统向客户端发送一个TCP keepalive消息后无网络活动的时间总量。 如果指定值时没有单位,则以秒为单位。值0(默认值)表示选择操作系统默认值
#tcp_keepalives_interval = 0                # 未被客户端确认收到的TCP keepalive消息应重新传输的时间长度。 如果指定值时没有单位,则以秒为单位。值0(默认值)表示选择操作系统默认值
#tcp_keepalives_count = 0                # 服务器到客户端的连接被认为中断之前可以丢失的TCP keepalive消息的数量。值0(默认值)表示选择操作系统默认值

#authentication_timeout = 1min        # 认证超时,取 1s-600s
#ssl = off                                            # 是否启用ssl 连接,默认关闭
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'                 #允许使用的ssl 加密套件,如:

                                                HIGH : AES, Camellia, 3DES

                                                MEDIUM:RC4, SEED

                                                +3DES:3DES

                                                !aNULL:禁用不做认证的匿名密码组

                                                
#ssl_prefer_server_ciphers = on                                # 是否首选服务端的SSL认证
#ssl_ecdh_curve = 'prime256v1'                                # 指定用在ECDH密钥交换中的曲线名称,需要客户端支持。
#ssl_dh_params_file = ''                                             #含有用于SSL密码的所谓临时DH家族的Diffie-Hellman参数的文件名。默认值为空。
#ssl_cert_file = 'server.crt'                                          #服务器证书文件名
#ssl_key_file = 'server.key'                                        #服务器私钥文件名
#ssl_ca_file = ''                                                            #服务器证书颁发机构的文件名
#ssl_crl_file = ''                                                            #服务器证书的文件名
#password_encryption = md5                                     #密码加密算法, md5 or scram-sha-256
#db_user_namespace = off                                        #启用针对每个数据库的用户名
#row_security = on                                                      # 行安全策略
#krb_server_keyfile = ''                                                #Kerberos服务器密钥文件的位置
#krb_caseins_users = off                                            #是否应该以大小写不敏感的方式对待GSSAPI用户名,默认为大小写敏感。

1.2、资源配置

shared_buffers = 256MB            # 共享内存缓存区大小,最小 128kB, 默认128MB
#huge_pages = try                    # 是否为主共享内存区域请求巨型页,try:尝试,即使失败不影响服务器启动;on:请求,如果失败影响服务器启动;off:不请求
#temp_buffers = 8MB            # 设置会话的临时缓冲区大小,最小 800kB
#max_prepared_transactions = 0        # 同时处于准备状态的事务最大数目,默认为0,即 禁用
work_mem = 512MB                        #写入临时磁盘文件前的查询操作可使用的内存, min 64kB
#maintenance_work_mem = 512MB        # 指定创建索引或修改外键时,使用的最大内存,min 1MB
#replacement_sort_tuples = 150000            # 允许默认的排序策略使用的CPU缓存
#autovacuum_work_mem = -1                # 指定每个自动清理工作进程使用的最大内存量,默认-1 表示使用maintenance_work_mem 的配置
#max_stack_depth = 2MB            # 服务器执行堆栈的最大安全深度, min 100kB
dynamic_shared_memory_type = posix    # 动态共享内存实现

                可选项:

                 # posix(用于使用shm_open分配的posix共享内存)

                 # sysv(用于通过shmget分配的System V共享内存)

                 # windows(用于windows共享内存)、

                 # mmap(用于使用存储在数据目录中的内存映射文件模拟共享内存)

                 # none(用于禁用此特性)

#temp_file_limit = -1                            #用于临时文件的最大磁盘量,默认-1 没有限制

#max_files_per_process = 1000        #每个子进程允许同时打开的最大文件数,默认1000,min 25
shared_preload_libraries = 'pg_stat_statements'        # 预加载的共享库,用于统计数据库的资源开销
pg_stat_statements.max = 10000   #允许保留多少条统计信息

pg_stat_statements.track = all        #all - (所有SQL包括函数内嵌套的SQL), top - 直接执行的SQL(函数内的sql不被跟踪), none - (不跟踪)

#vacuum_cost_delay = 0            # 超过开销限制时,进程休眠的时间,0-100 milliseconds,默认禁用
#vacuum_cost_page_hit = 1        #清理一个在共享缓存中找到的缓冲区的估计代价。它表示锁住缓冲池、查找共享哈希表和扫描页内容的代价。默认值为1。 0-10000 credits
#vacuum_cost_page_miss = 10        # 清理一个必须从磁盘上读取的缓冲区的代价。它表示锁住缓冲池、查找共享哈希表、从磁盘读取需要的块以及扫描其内容的代价。默认值为10。0-10000 credits
#vacuum_cost_page_dirty = 20        # 当清理修改一个之前干净的块时需要花费的估计代价。它表示再次把脏块刷出到磁盘所需要的额外I/O。默认值为20。0-10000 credits
#vacuum_cost_limit = 200        # 将导致清理进程休眠的累计代价。默认值为200。1-10000 credits

#bgwriter_delay = 200ms            # 指定后台写入器活动轮次之间的延迟
#bgwriter_lru_maxpages = 100        # 每个轮次中不超过多少个缓存区
#bgwriter_lru_multiplier = 2.0        # 基数,最近一轮写缓冲区的个数乘以这个值,估算下一轮
#bgwriter_flush_after = 512kB        # 超过大小后,尝试强制 把这些写发送到底层存储上

#effective_io_concurrency = 1        # 并发IO的数量,1-1000; 0 disables prefetching
#max_worker_processes = 8        # 后台进程的最大数
#max_parallel_workers_per_gather = 2    # 单个节点开始的最大worker 数量
#max_parallel_workers = 8        # 支持的最大worker数量
#old_snapshot_threshold = -1        #可以使用且没有发生错误的最小快照时间 1min-60d; -1 禁用; 0 is immediate
#backend_flush_after = 0        # 只要一个写入的数据量超过,就强制写入底层存储, 0禁用

1.3、预写式日志 (Write-Ahead Logging)

wal_level = replica            # 级别,字面意思,minimal, replica, or logical
fsync = off                # 尝试确保更新被物理地写入到磁盘
#synchronous_commit = on        # 级别,数据库服务器返回“success”指示给客户端之前,必须要完成多少WAL处理,remote_applyon(默认值), remote_write,local, 和 off
#wal_sync_method = fsync        # 强制 WAL 更新到磁盘的方法
                    #   open_datasync  用open()选项O_DSYNC写 WAL 文件
                    #   fdatasync (default on Linux)  每次提交时调用
                    #   fsync   每次提交时调用
                    #   fsync_writethrough  每次提交时调用fsync(),强制任何磁盘写高速缓存的直通写
                    #   open_sync   用open()选项O_SYNC写 WAL 文件
#full_page_writes = on            # 从一个检测点的页面的第一次修改期间将每个页面的全部内容写到 WAL 中
#wal_compression = off            # 允许压缩
#wal_log_hints = off            # 检查点之后页面首次修改期间把该磁盘页面的整个内容都写入 WAL
#wal_buffers = -1            # 还未写入磁盘的共享缓冲区大小 min 32kB, -1 sets based on shared_buffers
#wal_writer_delay = 200ms        #写入刷新频率,时间维度 1-10000 milliseconds
#wal_writer_flush_after = 1MB        #写入刷新频率,大小维度  measured in pages, 0 disables

#commit_delay = 0            # 写入前的时间延迟,range 0-100000, in microseconds
#commit_siblings = 5            #执行延迟时,并发事务的最小数量, range 1-1000

checkpoint_timeout = 5min        #检查间隔 range 30s-1d
max_wal_size = 1GB           #2个检查点之间,允许增长的最大数量
#min_wal_size = 80MB       # 和上类似
#checkpoint_completion_target = 0.5    # 指定检查点需要完成的目标, 0.0 - 1.0
#checkpoint_flush_after = 256kB        # 当执行检查点时,超过这个数量会强制写到底层存储, 0 disables
#checkpoint_warning = 30s        #检查点低于该值,写日志, 0 disables

archive_mode = on        # 归档; off, on, or always
archive_command = 'cp %p /mnt/data/pgbackup/pgarchive/%f'        # 归档的目录
                # placeholders: %p = 归档的文件目录
                #               %f = 归档的文件名
                # e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
#archive_timeout = 0        # 归档的时间间隔, 0 disables

1.4、复制

max_wal_senders = 2        # 备份客户端的最大并发,发送服务器
wal_keep_segments = 64        # 为备份客户端保留的段大小, 16MB each; 0 disables
wal_sender_timeout = 60s    # 发送超时; 0 disables

#max_replication_slots = 10    # 支持的最大复制槽数
#track_commit_timestamp = off    # 记录事务的提交时间

#synchronous_standby_names = ''    # 同步复制的机器列表; '*' = all
#vacuum_defer_cleanup_age = 0    # 更新在清理死亡版本前的延迟

#hot_standby = on            # 恢复期间,是否允许连接查询
#max_standby_archive_delay = 30s    #并发冲突间隔(归档时)
#max_standby_streaming_delay = 30s    # 并发冲突间隔(流式复制时)
#wal_receiver_status_interval = 10s    # 备份机器发送状态间隔
#hot_standby_feedback = off        # 发送当前备份机器的查询反馈
#wal_receiver_timeout = 60s        # 复制连接的响应超时
#wal_retrieve_retry_interval = 5s    # 复制连接的等待超时

#max_logical_replication_workers = 4    # 复制worker的最大数量
#max_sync_workers_per_subscription = 2    # 订阅worker的最大数量

1.5、查询规划

#enable_bitmapscan = on     #是否允许查询使用位图扫描
#enable_hashagg = on          #是否允许查询使用hash聚合
#enable_hashjoin = on          #是否允许查询使用hash连接
#enable_indexscan = on       #是否允许查询使用索引扫描
#enable_indexonlyscan = on   #是否允许查询只使用索引扫描
#enable_mergejoin = on      #是否允许查询使用归并连接
#enable_nestloop = on       #是否允许查询使用嵌套循环
#enable_seqscan = on       #是否允许查询使用顺序扫描
#enable_sort = on              #是否允许查询使用显示排序

# - Planner Cost Constants -

#seq_page_cost = 1.0            # 计算一次顺序磁盘页面的开销
#random_page_cost = 4.0            #计算一次非顺序磁盘页面的开销
#cpu_tuple_cost = 0.01            # 处理每一行的cpu 开销
#cpu_index_tuple_cost = 0.005        # 处理每一个索引项的CPU开销
#cpu_operator_cost = 0.0025        # 处理每一个操作符或函数的CPU开销
#parallel_tuple_cost = 0.1        # 从一个进程传递一个元组给另一个进程的开销
#parallel_setup_cost = 1000.0    # 并行进程的开销
#min_parallel_table_scan_size = 8MB  #最小并行扫描的数据量
#min_parallel_index_scan_size = 512kB  #最小并行扫描的索引量
#effective_cache_size = 4GB    #单一查询缓冲区大小

1.6、错误和日志

#log_destination = 'stderr'        # 多种日志记录方式
                    # stderr, csvlog, syslog, and eventlog,
#logging_collector = off        # 日志收集器
#log_directory = 'log'            # 日志目录
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'    # 文件名
#log_file_mode = 0600            # 日志文件权限
#log_truncate_on_rotation = off        #日志截断
#log_rotation_age = 1d            # 单一日志的周期
#log_rotation_size = 10MB        # 单一日志的大小
#syslog_facility = 'LOCAL0'      #是否向syslog写日志
#syslog_ident = 'postgres'        #程序名
#syslog_sequence_numbers = on   #日志前缀
#syslog_split_messages = on       #日志分割
#event_source = 'PostgreSQL'     #日志程序名

#client_min_messages = notice        # 连接客户端的日志级别
                    #   debug1-5、log、 notice、warning、 error

#log_min_messages = warning        # 日志级别
                    #   debug1-5、  info、notice、warning、 error、log、 fatal、 panic

#log_min_error_statement = error    # 错误SQL 级别
                    #   debug 1-5、 info、notice、warning、error、log、fatal、panic (effectively off)

#log_min_duration_statement = -1    # 语句执行的持续时间,-1 is disabled, 0 logs all statements
                    # and their durations, > 0 logs only
# 调试输出

#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] '        # special values:
                    #   %a = application name
                    #   %u = user name
                    #   %d = database name
                    #   %r = remote host and port
                    #   %h = remote host
                    #   %p = process ID
                    #   %t = timestamp without milliseconds
                    #   %m = timestamp with milliseconds
                    #   %n = timestamp with milliseconds (as a Unix epoch)
                    #   %i = command tag
                    #   %e = SQL state
                    #   %c = session ID
                    #   %l = session line number
                    #   %s = session start timestamp
                    #   %v = virtual transaction ID
                    #   %x = transaction ID (0 if none)
                    #   %q = stop here in non-session
                    #        processes
                    #   %% = '%'
                    # e.g. '<%u%%%d> '
#log_lock_waits = off            # log lock waits >= deadlock_timeout
#log_statement = 'none'            # none, ddl, mod, all
#log_replication_commands = off
#log_temp_files = -1            # log temporary files equal or larger
                    # than the specified size in kilobytes;
                    # -1 disables, 0 logs all temp files
log_timezone = 'PRC'    #中国时区


# - Process Title -

#cluster_name = ''            # 进程标题
#update_process_title = on  #启动进程标题更新

1.7、统计数据

# - 查询和索引命令统计收集

#track_activities = on   #每个回话的执行命令和时间
#track_counts = on
#track_io_timing = off
#track_functions = none            # none, pl, all  跟踪函数调用
#track_activity_query_size = 1024    # 统计每个查询的内存量
#stats_temp_directory = 'pg_stat_tmp'  #统计的缓存目录


# - 统计监控,对每个查询,向服务器日志里输出相应模块的性能统计

#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
#log_statement_stats = off

1.8、自动清理

#autovacuum = on            # 是否开启自动清理,依赖track_count
#log_autovacuum_min_duration = -1    # 是否记录自动清理动作
#autovacuum_max_workers = 3        # 自动清理的最大worker 数量

#autovacuum_naptime = 1min        # 运行的最小延迟
#autovacuum_vacuum_threshold = 50    # 在表上被触发的清理的更新或修改的元组数据量
#autovacuum_analyze_threshold = 50    # 在表上被触发的分析的更新或修改的元组数据量
#autovacuum_vacuum_scale_factor = 0.2    # 指定表分数,决定是否触发vacuum
#autovacuum_analyze_scale_factor = 0.1    # 指定表分数,决定是否触发analyze
#autovacuum_freeze_max_age = 200000000    #触发vacuum事务前的最大年龄
#autovacuum_multixact_freeze_max_age = 400000000    #触发vacuum多事务前的最大年龄 
#autovacuum_vacuum_cost_delay = 20ms    # 延迟
#autovacuum_vacuum_cost_limit = -1    #限制值

1.9、客户端连接

#search_path = '"$user", public'    # 搜索对象的模式顺序
#default_tablespace = ''        # 默认表空间
#temp_tablespaces = ''            # 缓存表空间
#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            # 执行超时
#lock_timeout = 0            # 锁超时
#idle_in_transaction_session_timeout = 0    # 闲置事务超时
#vacuum_freeze_min_age = 50000000  #触发vacuum 的最小年龄
#vacuum_freeze_table_age = 150000000  
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000
#bytea_output = 'hex'            # hex, escape  输出格式
#xmlbinary = 'base64'           #二进制编码格式
#xmloption = 'content'           #转换格式
 

# - Locale and Formatting -

datestyle = 'iso, mdy'     #日期时间的显示格式
#intervalstyle = 'postgres'   #间隔值得显示格式
timezone = 'PRC'         #时区
#timezone_abbreviations = 'Default'     # 设置服务器接受的日期时间输入中使用的时区缩写集合
#extra_float_digits = 0            # 文本输出浮点值得位数,min -15, max 3
#client_encoding = sql_ascii        # 客户端字符集
lc_messages = 'en_US.UTF-8'            # 消息语言
lc_monetary = 'en_US.UTF-8'            # 货币
lc_numeric = 'en_US.UTF-8'            #数字
lc_time = 'en_US.UTF-8'                # 时间


default_text_search_config = 'pg_catalog.english'  #默认文本搜索配置

# - Other Defaults -

#dynamic_library_path = '$libdir'   #动态共享库地址
#local_preload_libraries = ''
#session_preload_libraries = ''

1.10、锁管理

#deadlock_timeout = 1s     #死锁超时
#max_locks_per_transaction = 64        # 共享锁在表上的数量,min 10
#max_pred_locks_per_transaction = 64    # 共享谓词锁在表上的数量,min 10
#max_pred_locks_per_relation = -2    # 单个关系上能够锁多少页
#max_pred_locks_per_page = 2            # 单一页面上能够锁住多少行,min 0

1.11、错误处理

#exit_on_error = off            # 会话终止
#restart_after_crash = on        # 后端崩溃后自动重新初始化

1.12、配置加载

#include_dir = 'conf.d'            # 加载配置文件目录
#include_if_exists = 'exists.conf'    # 如果文件存在,加载配置文件
#include = 'special.conf'        # 加载配置文件

2、pg_hba.conf

该文件用于控制客户端认证。每条记录指定一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关)、一个数据库名、一个用户名以及对匹配这些参数的连接使用的认证方法。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
#host    all             all             0.0.0.0/0               md5
host    all             all             0.0.0.0/0               trust

local:这条记录匹配使用 Unix 域套接字的连接。 如果没有这种类型的记录,就不允许 Unix 域套接字连接。

host:这条记录匹配使用 TCP/IP 建立的连接。 host记录匹配SSL和非SSL的连接尝试。

hostssl:这条记录匹配使用 TCP/IP 建立的连接,但必须是使用SSL加密的连接。

hostnossl:只匹配那些在 TCP/IP上不使用SSL的连接。

hostgssenc、hostnogssenc: 同ssl 、nossl 类似。

database: 指定匹配的数据库名称

user: 指定匹配的数据库用户名

address: 指定匹配的客户端IP

method : 指定认证方式。其中:

        trust:无条件允许。

        reject: 无条件拒绝。

        md5、 scram-sha-256:  执行加密认证口令。

        peer:从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名

        ident:通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名

        password: 不加密认证口令。

        ldap:使用LDAP服务器认证。

        pam:使用操作系统提供的可插入认证模块服务(PAM)认证。

3、pg_ident.conf

用户名映射,当使用像 Ident 或者 GSSAPI 之类的外部认证系统时,发起连接的操作系统用户名可能不同于要被使用的数据库用户(角色),此时可以使用用户名映射。

格式如下:

map-name  system-username database-username

其中,map-name是一个任意名称,用于在pg_hba.conf中引用该映射。其他两个一个是操作系统用户名,一个是数据库用户名。相同的map-name可以被反复地用在同一个映射中指定多个用户映射。

四、参考

本文参考官方文档:http://www.postgres.cn/docs/13/runtime-config.html













 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值