如何在 Arch Linux 上使用 pg_upgrade

如何在 Arch Linux 上使用 pg_upgrade

我在 arch 上运行的是 postgres 8.4,但现在安装了 9。我想使用 pg_upgrade 进行升级,但我不知道我必须使用的所有选项是什么,以及我必须指向的所有目录。它要求提供以前的 pg 二进制目录...但该目录已不存在。它还能工作吗?注意:我没有重要的数据,只是玩数据库,我只是想知道如何去做。

答案1

我确信你已经阅读过文档,但以防万一你还没有 -“F.32. pg_upgrade”

分步说明尤其详细。

您至少需要为--old-datadir--new-datadir--old-bindir选项提供值--new-bindir

如果您的旧安装丢失,您可以随时(我希望如此,我从未使用过 Arch Linux)重新安装它而不覆盖旧数据目录。如果您的发行版不支持此功能,您可以(暂时)重新安装旧版本来自源头

然后您就可以运行了pg_upgrade。请记住将两个共存的安装(新安装和旧安装)配置为使用不同的端口。同时(暂时)将两者的本地访问方法设置为“信任”。

答案2

这是在 Arch 上使用 Postgres 的问题之一:升级后它不会自动更改文件格式。

我通常只是执行数据库转储和恢复作为升级过程。(无论如何你应该有数据库转储作为备份......)

答案3

老问题,但如果有人遇到同样的问题,我会写一个答案。

就在昨天,我的 PostgreSQL 升级到了 14.2,之前使用的是 13.6。升级会删除旧目录,因此无法运行pg_upgrade。我从 AUR 获得了一个包,但它也会替换现有的二进制文件。

但幸运的是,Archlinux 现在提供了软件包postgresql-old-upgrade。它包含了 PostgreSQL 的最新版本。

因此,这里有解决每次升级 Postgresql 时遇到的升级问题的步骤。

  1. postgresql-old-upgrade使用 pacman安装:
# pacman -S postgresql-old-upgrade
  1. 将内容从/var/lib/postgres/data/(或任何您的 DB 目录)复制/移动到其他目录。假设我使用cp -ato进行复制/tmp/。请注意,复制到 tmp/ 将增加内存使用量,直到您删除文件为止。它可能会使用几兆字节甚至几千兆字节。

请注意,按照步骤 5 操作后,您的所有数据都将被恢复。执行此操作时,需要使用 备份数据库pg_dump并使用 恢复pg_restore

  1. 删除/var/lib/postgres/data/(或您的数据库路径)。

  2. 使用 以您的 postgres 用户身份登录su postgres。[如果您不知道密码,请从 root 用户重置密码]。

  3. 现在您可以正常升级旧数据库:

postgres$ pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin/ -d /tmp/data/ -D /var/lib/postgres/data/
  1. 消除postgresql-old-upgrade
# pacman -Rns postgresql-old-upgrade

当然,这最后一步是可选的,您可以将 postgresql-old-upgrade 留在将来的升级中,以便在 PostgreSQL 升级时使用。


目录和版本可能会有所不同,但一般来说,这就是解决问题的方法。

相关内容