我有一个 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/postgresql
与start
参数有关。查看它,它似乎引用了/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
,它将自动为您解决所有这些问题。