清理冲突的 postgresql 安装

清理冲突的 postgresql 安装

我有一个小开发盒,已升级到 Debian 8.5(以拥有当前的 apache 和 postgres,更好地匹配生产服务器)。现在我有 Postgres 9.1(旧)和 9.4(我想使用):

$ systemctl | grep postgres
 postgresql.service            loaded active exited    PostgreSQL RDBMS
 [email protected]   loaded failed failed    PostgreSQL Cluster 9.1-main
 [email protected]   loaded active running   PostgreSQL Cluster 9.4-main
 system-postgresql.slice       loaded active active    system-postgresql.slice

PostgreSQL 9.4 服务自动设置为在非标准端口 5433 上提供服务,我对此进行了更改;现在当然不可能同时运行两者。我不想运行两个版本;我希望 PostgreSQL 9.4 为我现有的数据库提供服务。

我可以恢复以使我的数据库再次可用,如下所示:

$ systemctl stop [email protected]
$ systemctl start [email protected]

这让我恢复了我的数据库,但当然是使用过时的数据库引擎。

我该如何清理这个烂摊子?我可以卸载版本 9.1 而不会丢失数据吗?或者我应该导出数据库并重新创建它们?系统数据库(postgres等等)怎么样template1

答案1

经过一番挣扎,我发现这是这样的:

文档中提到的两种主要可能性:

  1. 用于pg_dumpall从旧服务中导出数据并将psql其导入到新服务中;
  2. 使用pg_upgrade

我的建议是:除非您有令人信服的理由不这样做,否则请使用以下pg_dumpall方法:

  1. 从旧数据库服务中导出所有内容(如果已安装新版本,则使用新的pg_dumpall二进制文件);
  2. 导入新数据库服务中的所有内容。
  3. 停止旧的数据库服务。
  4. 确保您对新版本的配置postgresql.conf进行了所有更改;pg_hba.conf如有必要,重新启动新服务。
  5. 测试您的应用程序是否仍然有效。
  6. 卸载旧版本。

就我而言(-p <Port>酌情使用):

sudo -s -u postgres
cd /tmp/
pg_dumpall -p 5433 > all.sql
psql -f all.sql

并作为root

systemctl stop [email protected]
vimdiff /etc/postgresql/9.{1,4}/main/postgresql.conf
vimdiff /etc/postgresql/9.{1,4}/main/pg_hba.conf
systemctl restart [email protected]
apt-get remove postgresql-client-9.1 postgresql-9.1

pg_upgrade方法要求您找出并指定:

  • 新旧数据目录(例如grep data_directory /etc/postgresql/9.{1,4}/main/postgresql.conf
  • 新旧二进制文件的目录(例如dpkg --listfiles postgresql-9.1 | grep '/bin$'
  • 您需要从用户postgres可以写入的目录开始

...然后它仍然不一定有效(例如参见pg_upgrade 失败并出现未指定的错误)。

相关内容