postgresql数据库配置文件postgresql.conf,pg_hba.conf,pg_ident.conf

  目录

  PG数据库管理

  配置文件

  首先要告诉你的就是这个配置文件正在postgresql数据库配置文件data目录下

  postgresql.conf

  在9.4的版本里引入了一个新的名为postgresql.auto.conf的配置文件,其中配置项会覆盖postgresql.conf的同名配置项。所以建议不要修改postgresql.conf,而是优先修改postgresql.auto.conf

  该文件中包含一些通用的设置,比如内存分配 ,新建database的默认存储位置,postgresql服务器的ip地址,日志以及许多其他设置。

  查看postgresql.conf视图即可查看所有配置项内容,无需打开配置文件。

  SELECT

  name,context,unit,setting,boot_val,reset_val

  FROM pg_settings

  WHERE name IN ('listen_addressed','deadlock_timeout','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem')

  ORDER BY context,name;

  SELECT name,sourcefile,sourceline,setting,applied

  FROM pg_file_settings

  WHERE name IN ('listen_addresses','deadlock_timeout','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem')

  ORDER BY name;

  以下几个配置项需要注意,不然可能导致客户端无法连接:

  表示postgresql服务使用的ip地址,我这里设置的*,表示使用任意的ip均可连接到POSTgresql数据库。

  pg库的侦听端口,默认值为5432.

  系统允许的最大并发连接数

  定义日志文件的输出格式,默认值是stderr。如果是要记日志的话切记要讲logging_collection配置项设为on。

  下面介绍的这些配置项会影响系统的整体性能,其默认值一般不是最优的。建议根据实际情况进行调整。

  此设置定义了用于缓存最近访问过的数据页的内存区大小,所有用户会话均可共享此缓存区。此设置对查询速度有着重大影响,一般来说设置的越大越好,至少应该达到系统的总内存的25% ,但不适宜超过8GB,因为超过会出现边际收益递减效应,即消耗的内存很多,但得到的速度提升却很少,这是得不偿失的,意义不大的。

  该配置是一个估算值,表示操作系统分配多少内存给PG专用。系统并不会根据这个值来真实地分配这么多内存,但是规划器会根据这个值来判断系统是否能提供查询执行过程所需的内存。如果将此值设置的过小,远远小于系统的真实可用内存量,那么可能会给规划器造成误导,让规划器认为系统可用内存有限,从而选择不使用索引而是执行全表扫描(因为使用索引虽然速度快,但需要占用更多的中间内存)。在一台专用于 运行pgsql数据库服务的机器上,建议是将effective_cache_size的值设为系统总内存的一般或者更多。

  此设置指定了用于执行排序,散列关联,表扫描等操作的最大内存大小。要得到此设置的最优值需要考虑以下因素:数据库的使用方式,需要预留多少内存给除数据库系统外的程序,以及服务器是否专用于pgsql服务等问题。如果使用场景仅仅是有很多用户并发执行简单查询,那么这个值可以设得小一点,这样每个用户都得以较为公平的使用内存,否则第一个用户就可能会把内存占光。这个值该设多大同样取决于你的机器总共有多少内存可用

  此设置指定了可用于vaccum(即清空已标记为“被删除”状态的记录)这类系统内部维护操作的内存总量。其值不应大于1GB,此设置的更改可动态生效,执行重新加载既可。

  这是9.6版本新引入的一个配置项,用于控制语句执行的并行度。该配置项决定了执行计划的每个gather节点中最多允许启动多少个worker进程并行工作。默认值为0,表示不启用并行功能。

  ALTER SYSTEM

  这是9.4版本之后引入的一个命令,这个命令可以更改设置。

  🎯例如:设置一个全局生效的work_mem:

  ALTER SYSTEM work_mem = '500MB';

  这个命令呢是不会直接修改postgresql.conf文件本身,而是去修改postgresql.auto.conf文件。

  每个设置有何各自不同的特性,有的更改后必须重启数据库服务才能生效,有的只要重新加载一次就可以了,下面这个命令可以实现设置重新加载:

  SELECT pg_reload_conf();

  如果你需要时常修改很多配置项,那么可以尝试将他们分门别类存放到多个配置文件中,然后通过在postgresql.conf中使用include或者include_if_exists前缀来引入这些配置文件。具体语法如下:

  include '配置文件名'

  这里的配置文件可以是绝对路径也可以是相对路径,相对路径的起始位置就是postgresql.conf文件本身所在的位置。

  pg_hba.conf

  该文件用于控制Postgresql服务器的访问权限,具体包括:允许哪些用户连接到哪个数据库,允许哪些ip地址连接到本服务器,以及指定连接时使用的身份验证模式。该文件的修改是可动态生效的,执行一次配置重加载既可。一个典型的pg_hba.conf文件如下图所示:

  1️⃣身份验证模式。一般有以下几种常用选项:ident,trust,MD5,peer以及passwd。

  2️⃣用于定义ipv6网段。轧制油服务器支持ipv6才可以配置该项,如果在非ipv6网络环境下配置了这样的条目,会导致pg_hba.conf文件无法加载,从而进一步导致任何客户端都无法连接。

  3️⃣用于定义ipv4网段。第一部分是网络地址,后面跟着子网掩码。

  4️⃣这是针对SSL连接的规则。在本图中,任何使用SSL方式连接的客户端都可以连接到PGSQL实例上去。

  SSL相关配置在postgresql.conf和postgresql.auto.conf中,包含一下几项:ssl,ssl_cert_file,ssl_key_file。一旦确认客户端支持SSL,postgresql服务端就会接受其连接请求,并且该连接上的所有传输内容都会使用ssl key加密。

  5️⃣这是允许与本节点构成复制关系的其他Postgresql服务器节点的IP网段。

  对于每一个连接请求,就像防火墙一样,这玩意是从上到下匹配规则链的。

  PostgreSQL10 中引入了一个新的名为pg_hba_file_rules的视图,通过查询该视图可以直接看到pg_hba.conf中的内容。

  don't害怕,因为如果postgres服务无法正确的解析pg_hba.conf文件,那么为确保系统安全,他会禁止所有的连接请求甚至是禁止系统启动。你去看一手日志,然后将错误的内荣改正就好,如果你经常会改错,那就事先记得备份一手。

  最常用的身份验证方法有以下这些:

  这是最不安全的身份验证模式,用户无需提供密码就可以连接到数据库,只要源端IP地址,连接用户名,要访问的databases名都与该条规则匹配,用户就可以连上来。trust模式很不安全,因此要有所限制。

  该模式很常用,要求连接发起者携带MD5算法加密的密码。

  该模式要求连接发起者携带明文密码进行身份验证。

  该身份验证模式下,系统会将请求发起者的操作系统用户映射为postgresSQL数据库内部用户,并以该内部用户的权限登陆,且此时无需提供登陆密码。Windows上是不支持ident验证方式。

  该模式下系统会直接从操作系统内核获取当前连接发起者的操作系统用户名,如果与其请求连接的postgresql用户名一致,即可连接成功。该模式仅可用于Linux,BSD,macOS和Solaris,并且仅可用于本地服务器发起的连接。

  该模式要求客户端必须使用SSL方式进行连接。连接发起者必须提供一个合法的SSL做证书。该模式使用一个身份认证文件来讲SSL证书文件映射为postgresql数据库的内部用户 ,该模式支持只在所有支持SSL连接的平台上都可用。

  pg_ident.conf

  如果该文件存在,则系统会基于文件内容将当前登录的操作系统用户映射为一个postgreSQL数据库内部用户的身份来登录。有些人会把操作系统的root用户映射为postgreSQL的postgres超级用户账号。

  在PG的官方术语体系中,角色role就表示用户,但并不是所有的角色都需要具备登录权限,比如组角色通常就不需要。

  如果你在安装过程中使用了默认配置,则上述的文件会位于Postgresql主数据文件夹中。当然,如果你不确定这些文件的具体位置,以超级用户身份连接到任何一个数据库上并执行下面的查询语句就会查到:

  SELECT name ,setting FROM pg_settings WHERE category='File Locations';

  让配置文件生效

  有些配置项修改后会需要重启pgsql服务实例,但是有的配置项修改只需要重新加载一下配置文件既可生效,如何判断呢?

  我们可以查看该配置项的context属性,如果是postmaster ,那么需要重启;如果是user,那么重新加载配置文件既可。

  你说怎么查context属性???上面有,你可以看看那个select pg_setting那个语句。

  pg_ctl reload -D /usr/local/pgsql/data (后面跟的是你的数据目录)

  重新加载pg服务

  pg_ctl restart -D /usr/local/pgsql/data (后面跟的是你的数据目录)

  以上就是postgresql数据库配置文件postgresql.conf,pg_hba.conf,pg_ident.conf的详细内容,更多关于postgresql 配置文件的资料请关注脚本之家其它相关文章!

  您可能感兴趣的文章: