如何更改“service postgresql start”的 postgresql 数据库的 config_file 位置?

如何更改“service postgresql start”的 postgresql 数据库的 config_file 位置?

我有一个 PostgreSQL 9.1 数据库,刚刚升级到 9.3,使用

/usr/lib/postgresql/9.3/bin/pg_upgrade -b /usr/lib/postgresql/9.1/bin -B /usr/lib/postgresql/9.3/bin -d /var/lib/postgresql/9.1/main/ -D /var/lib/postgresql/9.3/main/ -O "-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -o "-c config_file=/etc/postgresql/9.1/main/postgresql.conf"

按照说明这里,不幸的是,后来我才意识到我没有仔细看最后一点。

升级(成功)后,我发现数据目录的默认位置(在本例中/var/lib/postgresql/9.3/main),升级中的选项现在已经将我的所有 PostgreSQL 配置文件配置为位于/etc/postgresql/9.1/main/

我花了一段时间寻找改变这种情况的方法,到目前为止我发现虽然hba_file和本身ident_file可以轻松更改postgresql.conf,但只能通过命令行界面config_file进行设置。postgres

我尝试使用postgres-o "-c config_file=/var/lib/postgresql/9.3/main"选项,但似乎这只是尝试启动该服务的另一个实例,与所做的无关service postgresql start

跑步pg_ctl status -D ~/9.3/main/我得到

`/usr/lib/postgresql/9.3/bin/postgres "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"`

我认为这意味着它-c... /etc...被传递给启动服务的任何对象。根据我有限的知识,我认为这/etc/init.d/postgresqlstart参数有关。查看它,它似乎引用了/usr/share/postgresql-common/init.d-functions包含以下内容的顶部

do_ctl_all() {
[ "$1" ] || { echo "Error: invalid command '$1'" >&2; exit 1; }
[ "$2" ] || { echo "Error: invalid version '$2'" >&2; exit 1; }
[ -d "/etc/postgresql/$2" ] || return 0
[ "$(ls /etc/postgresql/$2)" ] || return 0
[ -x "/usr/lib/postgresql/$2/bin/postmaster" ] || return 0
...

尽管我不确定这些是否有任何相关性。

我想我问的是是否有任何方法可以配置变量config_file或自定义服务的启动方式。

感谢您的帮助!抱歉我理解能力不足,我正在努力学习更多!

答案1

将所有配置文件复制到/etc/postgresql/9.3/main/。进行升级过程中所需的任何调整。然后,您应该能够使用以下命令启动新服务器

sudo pg_ctlcluster 9.3 main start

正如您所知道的,PostgreSQL 的 Debian 打包需要postgresql.conf位于该位置,因为它从那里开始确定其他所有内容的位置,包括数据目录和其他配置文件。确保您postgresql.conf指向这些文件的正确位置。

下次,使用pg_upgradecluster -m upgrade 9.1 main,它将自动为您解决所有这些问题。

相关内容