Bash 编辑pg_hba.conf的正确方法

Bash 编辑pg_hba.conf的正确方法,bash,postgresql,installation,Bash,Postgresql,Installation,因此,我正在尝试为我的应用程序(目标是Ubuntu 16)创建一个安装脚本。它必须创建一个postgresql用户,向该用户授予通过密码进行身份验证的权限,并向该用户授予本地身份验证的权限。我只想在一个数据库,即应用程序数据库上授予这样做的权限。因此,我需要在拒绝未知连接的行上方插入行localdatabasename username md5,例如,在pg_hba.conf.(pg_hba.conf使用文件中的位置确定优先级:遇到的与连接匹配的第一条规则给出最终结果。) 要添加此行,我的脚本将

因此,我正在尝试为我的应用程序(目标是Ubuntu 16)创建一个安装脚本。它必须创建一个postgresql用户,向该用户授予通过密码进行身份验证的权限,并向该用户授予本地身份验证的权限。我只想在一个数据库,即应用程序数据库上授予这样做的权限。因此,我需要在拒绝未知连接的行上方插入行
localdatabasename username md5
,例如,在
pg_hba.conf.
pg_hba.conf
使用文件中的位置确定优先级:遇到的与连接匹配的第一条规则给出最终结果。)

要添加此行,我的脚本将运行:

sudo awk '
/# Put your actual configuration here/ {
    print "local databasename username md5"
}
{ print }
' /etc/postgresql/9.5/main/pg_hba.conf

# other setup

service postgresql restart
但这并不是最理想的。首先,版本号将来会改变,所以硬编码目录很糟糕。其次,这使得其他人的项目中的注释成为配置文件的实际结构部分,从所有可能的角度来看,这是一个可怕的想法

因此,我的问题分为两个部分。首先,是否有一种好的、正确的、被接受的方法来编辑pg_hba.conf,我可以在安装脚本中使用它,而不是在文本编辑器中使用它

第二,如果第一部分没有很好的答案:是否有一种编程方式询问postgresql将pg_hba从何处提取?

是否有一种编程方式可以询问postgresql从何处获取pg_hba

Debian工具链 因此,我的问题分为两个部分:首先,是否有一种好的、正确的、被接受的方法来编辑pg_hba.conf,我可以在安装脚本中使用它,而不是在文本编辑器中使用它

是的,但是,你可能会觉得不满意

在上游,PostgreSQL不支持多个版本,也不支持使用其构建工具进行安装。Debian支持。因此Debian发明了
集群的概念,它本质上是一个名称和版本号

在Ubuntu或Debian上构建工具时,您可能还应该使用名称和版本号

第二,如果第一部分没有很好的答案:是否有一种编程方式可以询问postgresql从何处获取pg_hba

是的,有一个名为
pg_conftool
的工具。默认集群的名称是
main
。如果您想要9.5/main集群,您可以这样做

pg_conftool -s 9.5 main show hba_file
/etc/postgresql/9.5/main/pg_hba.conf
您可以看到conftool可以使用版本和名称,但严格来说,它可能不需要版本和名称

/usr/bin/pg_conftool [options] [<version> <cluster name>] [<configfile>] <command>
/usr/bin/pg_conftool[选项][]

如果您想在此上下文中了解有关集群的更多信息,请查看所有以
pg_*
开头的二进制文件,但首先是
pg_ctl
pg_ctlcluster
(debian包装器)

不确定是否使用debian/ubuntu。对于脚本来说,可能不是最好的主意,一个pg_hba文件可以被许多数据库使用。使用这种方法,您必须知道要连接到哪些数据库以及要使用哪些端口/主机。@EvanCarroll-用户通常知道他正在使用或将要安装的数据库。或者至少应该。请求这是对你答案第一部分的澄清。“DebianCluster”是谷歌搜索得很差的一个短语(StackOverflow也很差)因为“cluster”更常见的用法是指大规模并行计算,
man cluster
指的是一个特定的Postgre命令。@sgfit用
pg_*
检查所有二进制文件,但首先要检查
pg_ctl
pg_Ctluster
(debian包装器)
/usr/bin/pg_conftool [options] [<version> <cluster name>] [<configfile>] <command>