PG目录结构及配置文件的作用
bin:
二进制可执行文件目录,主要包括 服务端应用程序:initdb(初始化过程),pg_ctl(用于启动、停止或者重启postgres服务),createdb,createuser,dropdb,dropuser 客户端应用程序:用于连接数据库,设置运行参数,操作数据的应用程序。这些应用一般可以在任何主机上运行,与数据库服务器所处位置无关,其中有四个常用工具:psql连接,pg_dump备份,pg_restore恢复 扩展模块程序:扩展模块位于源码包中的contrib目录下,里面有些扩展模块编译后生成一个应用程序放在bin目录下,如pg bench(压力测试工具),pg_test_fsync,oid2name(解析一个PostgresSQL数据目录中的OID和文件节点)这些拓展模块程序默认再编译时是没有加载的,需要时进入相应的目录编译和安装 其他 |
share:
包括 txt:保存文档模板文件 locale:存储语言包 postgresql:配置模板文件
以及pg_hba.conf,pg_indent.conf,pg_service.conf等配置文件 |
include:头文件目录 |
lib:lib动态库目录,PG程序运行需要的动态库都在此目录下
data:
base: 该目录包含数据库用户所创建的各个数据库,同时也包括postgres、template0和template1的pg_defaulttablespace
pg_xlog:该目录包含wal日志。
hgdb_log: 该目录包含数据库日志。(目录名可自定义)
global: 该目录包含集群范围的各个表和相关视图。 ( pg_database、 pg_tablespace )
pg_clog: 该目录包含事务提交状态数据。
pg_multixact: 该目录包含多事务状态数据(等待锁定的并发事务)
pg_notify :该目录包含LISTEN/NOTIFY状态数据。
pg_serial:该目录包含了已经提交的序列化事务的有关信息。
pg_snapshots:该目录包含导出的快照。
pg_stat_tmp:该目录包含统计子系统的临时文件。
pg_subtrans:该目录包含子事务状态数据。
pg_tblspc:该目录包含表空间的符号链接。
pg_twophase:该目录包含预备事务的状态文件。
pg_commit_ts:该目录包含已提交事务的时间。
pg_dynshmem:该目录包含动态共享内存子系统使用的文件。
pg_logical:该目录包含逻辑解码的状态数据。
pg_replslot:该目录包含复制槽数据。
pg_stat:该目录包含统计子系统的永久文件。
pg_version:包含版本信息。
pg_hba.conf文件的作用:
是数据库判断客户端/应用程序能否正常访问数据库的唯一依据,pg的客户端访问数据库的时候,需要提供数据库服务器主机名或者IP地址,端口号,数据库名,数据库用户名,以及数据库用户密码或者数据库认证方式。
可以进行以下设置
TYPE 表示主机类型,值可能为:
若为 `local` 表示是unix-domain的socket连接,
若为 `host` 是TCP/IP socket
若为 `hostssl` 是SSL加密的TCP/IP socket
DATABASE 表示数据库名称,值可能为:
`all` ,`sameuser`,`samerole`,`replication`,`数据库名称` ,或者多个
数据库名称用 `逗号`,注意ALL不匹配 replication
USER 表示用户名称,值可以为:
`all`,`一个用户名`,`一组用户名` ,多个用户时,可以用 `,`逗号隔开,
或者在用户名称前缀 `+` ;在USER和DATABASE字段,也可以写一个单独的
文件名称用 `@` 前缀,该文件包含数据库名称或用户名称
该参数可以为 `主机名称` 或者`IP/32(IPV4) `或 `IP/128(IPV6)`,主机
名称以 `.`开头,`samehost`或`samenet` 匹配任意Ip地址
该值可以为"trust", "reject", "md5", "password", "scram-sha-256",
"gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"
注意:若为`password`则发送的为明文密码
文件的常用格式是一组记录,每行一条。空白行会被忽略,#注释字符后面的任何文本也会被忽略。记录不能跨行。一条记录由若干用空格和/或者制表符分割的域组成。如果阈值用双引号包围,那么它可以包含空白。在数据库、用户或地址域中引用一个关键字,将使得该词失去其特殊的含义,并且只是匹配一个该有名字的数据库、用户或者主机。
每条记录指定一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关)、一个数据库名、一个用户名以及对匹配这些参数的连接使用的认证方法。第一条匹配连接类型、客户端地址、连接请求的数据库和用户名的记录将被用于执行认证。这个过程没有"落空"或者"后备"的说法:如果选择了一条记录而且认证失败,那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
记录可以是下面的七种格式
local database user auth-method [auth-options]
host database user address auth-method [auth-options]
hostssl database user address auth-method [auth-options]
hostnossl database user address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]
local:这条记录匹配企图使用unix域嵌套接字的连接。如果没有这种类型的记录就不允许unix域套接字的连接
host:这条记录匹配企图使用TCP/IP建立的连接。host记录匹配SSL和非SSL的尝试连接
hostssl:这条记录匹配试图使用tcp/ip建立的连接,但必须是使用SSL加密的连接
要使用这个选项,编译服务器的时候必须打开SSL支持。此外,在服务器启动的时候必须通过设置SSL配置设置打开SSL
hostnossl:这条记录的行为与hostssl相反;它只匹配那些在TCP/IP上不使用SSL的连接企图
database:指定记录所匹配的数据库名称。值all指定该记录匹配所有数据库。值 sameuser指定如果被请求的数据库和请求的用户同名,则匹配。值samerole指定请求的用户必须是一个与数据库同名的角色中的成员(samegroup是一个已经废弃了,但目前仍然被接受的samerole同义词)。对于一个用于samerole目的的角色,超级用户不会被考虑为其中的成员,除非它们是该角色的显式成员(直接或间接),而不是由于超级用户的原因。值replication指定如果一个复制连接被请求则该记录匹配(注意复制连接不指定任何特定的数据库)。在其它情况里,这就是一个特定的PostgreSQL数据库名字。可以通过用逗号分隔的方法指定多个数据库,也可以通过在文件名前面放@来指定一个包含数据库名的文件。
user:指定这条记录匹配哪些数据库用户名。值all指定它匹配所有用户。否则,它要么是一个特定数据库用户的名字或者是一个有前导+的组名称(回想一下,在PostgreSQL里,用户和组没有真正的区别,+实际表示"匹配这个角色的任何直接或间接成员角色",而没有+记号的名字只匹配指定的角色)。出于这个目的,如果超级用户显式的是一个角色的成员(直接或间接),那么超级用户将只被认为是该角色的一个成员而不是作为一个超级用户。多个用户名可以通过用逗号分隔的方法提供。一个包含用户名的文件可以通过在文件名前面加上@来指定。
address:指定这个记录匹配的客户端机器地址。这个域可以包含一个主机名、一个 IP 地址范围或下文提到的特殊关键字之一。
一个 IP 地址范围以该范围的开始地址的标准数字记号指定,然后是一个斜线(/) 和一个CIDR掩码长度。掩码长度表示客户端 IP 地址必须匹配的高序二进制位位数。在给出的 IP 地址中,这个长度的右边的二进制位必须为零。 在 IP 地址、/和 CIDR 掩码长度之间不能有空白。
IP-address
IP-mask
这两个域可以被用作IP-address/ mask-length记号法的替代方案。和指定掩码长度不同,实际的掩码被指 定在一个单独的列中。
这些域只适用于host、hostssl和hostnossl记录。
认证方式:
trust:无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。
reject:无条件地拒绝连接。这有助于从一个组中"过滤出"特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。
md5:要求客户端提供一个双重 MD5 加密的口令进行认证
password:要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式
postgresql.conf:数据库实例的主配置文件,基本上所有的配置参数都在此文件中
连接Connection Settings
安全认证Security and Authentication