参数文件

postgresql.conf

文件的作用主要是控制数据库的通用信息,位于$PGDATA目录下,文件中参数生效的优先级是从后到前。

此外PostgreSQL9.6之后支持了alter system来修改配置参数,修改后的参数会保存在

$PGDATA/postgresql.auto.conf下,$PGDATA/postgresql.auto.conf文件是Postgresql.conf的辅

助配置文件,一般不会手动修改,该参数文件会覆盖postgresql.conf文件中相同的参数,参数修改后需要重启或者重载,可以reload或者 restart来使之生效。

listen_addresses = 'localhost'

它指定数据库用来监听客户端连接的TCP/IP地址。默认是值是localhost,表示数据库只能接受本地的客户端连接请求,不能接受远程的客户端连接请求。如果被设成*,表示数据库在启动以后将在运行数据的器上的所有的IP地址上监听用户请求。可以写成主机名,也 可以写成IP地址,不同的值用逗号分开,例如,’PCA001’, ’192.168.10.188, 192.168.10.119’

port (integer)

它指定数据库监听户端连接的TCP端口。默认值是5432。

max_connections (integer)

它决定数据库可以同时建立的最大的客户端连接的数目。默认值是100。

superuser_reserved_connections (integer)

它表示预留给超级用户的数据库连接数目。它的值必须小于max_connections。 普通用户可以在数据库中建立的最大的并发连接的数目是max_connections- superuser_reserved_connections, 默认值是3。

wal_level = replica # minimal, replica, or logical

wal 日志等级。

minimal 仅包含数据库恢复必需的最小信息。

replica 除了包含 minimal 级别的所有信息外,还会包含用于复制的额外信息。

logical在 replica 级别的基础上,还会包含更多信息,例如事务 ID、完整的行数据(包括被更新的旧值和新值),以及支持发布 - 订阅模式所需的元数据

archive_mode = off | on

默认值是off。它决定数据库是否打开归档模式

archive_command = ''

该参数值是一个 shell 命令,用设定存放归档事务日志文件的目录,可以按天进行存储,也可以直接放到一个目录里。

log_directory = 'log'

这个参数在postgresql.conf文件中被设置。它决定存放数据库运行日志文件的目录。默认

值是log。可以是绝对路径,也可是相对路径(相对于数据库文件所在的路径)。

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

决定数据库运行日志文件的名称。默认值是postgresql-%Y-%m-%d_%H%M%S.log。它的

值可以包含%Y、%m、%d、%H、%M和%S这样的字符串,分别表示年、月、日、小时、分和

秒。 如果参数的值中没有指定时间信息(没有出现%Y、%m、%d、%H、%M和%S中的任何

一个),系统会自动在log_filename值的末尾加上文件创建的时间作为文件名

synchronous_commit = on # off, local, remote_write, remote_apply, or replica

用于控制事务提交时的同步级别,直接影响数据安全性和性能。

当 synchronous_commit 设置为on时,事务提交时,WAL 日志必须写入磁盘并刷新缓存,确保奔溃后数据不丢失。安全性最高。

当设置为 off 时,事务提交时,WAL 日志仅写入操作系统缓存,不强制刷盘。安全性最低

如何查看参数

  • 查询pg_settings系统表:SELECT name,setting FROM pg_settings where name ~ ‘xxx’;

  • SELECT current_setting('work_mem');

  • 通过show (show all)命令查看

使参数生效的常用方法

SELECT pg_reload_conf();

pg_ctl -D $PGDATA reload

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.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
host    all             all             0.0.0.0/0          md5

一共是有五部分组成连接方式,访问那个数据库,用户名,访问访问(IP),认证方式,其中比较重要的时连接方式和认证方式,我们着重讲一下。

连接方式(TYPE):local,host,hostssl,hostnossl

  • local匹配使用Unix域套接字的连接,如果没有TYPE为local的条目则不允许通过Unix域套接字连接

  • host匹配使用TCP/IP建立的连接,同时匹配SSL和非SSL连接缺省安装只监听本地环回地址localhost的连接,不允许使用TCP/IP远程连接,启用远程连接需要修改postgresql.conf中的listen_addresses参数。

  • hostssl匹配必须是使用SSL的TCP/IP连接客户端和服务器端都安装OpenSSL编译PostgreSQL的时候指定configure参数--with-openssl打开SSL支持在postgresql.conf中配置ssl = on

  • hostnossl只匹配使用非SSL的TCP/IP连接

认证方式:trust, reject, md5, password, scram, gss, sspi, ident, peer, pam, ldap, radius or cert

  • trust无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。

  • reject无条件拒绝连接。常用于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连。

  • md5md5认证方式为双重md5加密

  • password口令认证,password指明文密码,所以不能在非信任网络使用password方式

  • peer从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。

pg_ident.conf

用户映射配置文件,控制PostgreSQL用户名映射。它映射外部用户名转换为相应的PostgreSQL用户名。结合pg_hba.conf中,method为ident可以用特定的操作系统用户和指定的数据库用户登录数据库。