如何更改“服务postgresql开始”的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 ),升级的选项现在configuration了我所有的PostgreSQLconfiguration文件位于/etc/postgresql/9.1/main/

我花了一段时间寻找一种方法来改变这一点,到目前为止,我发现虽然hba_fileident_file可以很容易地在postgresql.conf本身进行更改,但除了通过postgres命令行界面外,不能设置config_file

我尝试使用-o "-c config_file=/var/lib/postgresql/9.3/main"选项来使用postgres ,但似乎这只是试图启动服务的另一个实例,与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 ... 

虽然我不确定这些是否有任何关联。

我想我问的是,如果有任何方法来configurationconfig_filevariables或定制如何启动服务。

谢谢你的帮助! 对不起,我缺乏了解,我想了解更多!

将所有configuration文件复制到/etc/postgresql/9.3/main/ 。 作为升级的一部分进行任何调整。 那么你应该可以使用启动新的服务器

 sudo pg_ctlcluster 9.3 main start 

正如你所想的那样,PostgreSQL的Debian包装要求postgresql.conf位于那个地方,因为它从那里开始找出其他所有东西,包括数据目录和其他configuration文件。 确保你的postgresql.conf指向那些正确的地方。

下一次,使用pg_upgradecluster -m upgrade 9.1 main ,它会自动为你计算所有这一切。