查看pg_hba.conf文件的內容:
postgres=# select * from pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+-------+---------------+-----------+-----------+-----------------------------------------+-------------+---------+------- 84 | local | {all} | {all} | | | trust | | 86 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | trust | | 88 | host | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust | | 91 | host | {all} | {all} | 27.0.0.0 | 255.0.0.0 | md5 | | 92 | local | {replication} | {all} | | | trust | | 93 | host | {replication} | {all} | 127.0.0.1 | 255.255.255.255 | trust | | 94 | host | {replication} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust | | 95 | host | {all} | {all} | 27.0.0.0 | 255.0.0.0 | md5 | | (8 rows) postgres=#
我們來看看,pg_hba.conf文件在操作系統上位置:
postgres=# select setting from pg_settings where name like '%hba%'; setting ---------------------------------- /pgdata/11/data/pg_hba.conf (1 row) postgres=#
知道這些信息后,我們就可以將這些內容加載到表中:
postgres=# create table hba(lines text); CREATE TABLE postgres=# copy hba from '/pgdata/11/data/pg_hba.conf'; COPY 94 postgres=#
一旦加載到表中,我們就有了pg_hba.conf文件中的內容。
postgres=# select * from hba where lines !~ '^#' and lines !~ '^$'; lines ----------------------------------------------------------------------- local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust host all all 27.0.0.0/8 md5 local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust (7 rows) postgres=#
現在我們就可以按照常規表的方式插入記錄了:
postgres=# insert into hba (lines) values ('host all mydb ::1/128 trust'); INSERT 0 1 postgres=# select * from hba where lines !~ '^#' and lines !~ '^$'; lines ----------------------------------------------------------------------- local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust host all all 27.0.0.0/8 md5 local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust host all mydb ::1/128 trust (8 rows) postgres=#
再把表的內容寫回到文件中:
postgres=# copy hba to '/pgdata/11/data/pg_hba.conf'; COPY 95 postgres=#
讀取文件,看看我們新加的規則是否已經在文件中了:
postgres=# select pg_read_file('pg_hba.conf'); ....
修改了配置后,需要reload一下方可生效:
postgres=# select pg_reload_conf(); pg_reload_conf ---------------- t (1 row) postgres=#
不過,這種方式建議謹慎使用!