我在 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 时遇到的升级问题的步骤。
postgresql-old-upgrade
使用 pacman安装:
# pacman -S postgresql-old-upgrade
- 将内容从
/var/lib/postgres/data/
(或任何您的 DB 目录)复制/移动到其他目录。假设我使用cp -a
to进行复制/tmp/
。请注意,复制到 tmp/ 将增加内存使用量,直到您删除文件为止。它可能会使用几兆字节甚至几千兆字节。
请注意,按照步骤 5 操作后,您的所有数据都将被恢复。不执行此操作时,需要使用 备份数据库pg_dump
并使用 恢复pg_restore
。
删除
/var/lib/postgres/data/
(或您的数据库路径)。使用 以您的 postgres 用户身份登录
su postgres
。[如果您不知道密码,请从 root 用户重置密码]。现在您可以正常升级旧数据库:
postgres$ pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin/ -d /tmp/data/ -D /var/lib/postgres/data/
- 消除
postgresql-old-upgrade
:
# pacman -Rns postgresql-old-upgrade
当然,这最后一步是可选的,您可以将 postgresql-old-upgrade 留在将来的升级中,以便在 PostgreSQL 升级时使用。
目录和版本可能会有所不同,但一般来说,这就是解决问题的方法。