自从我上次在 Arch Linux 桌面上使用 PostgreSQL 以来已经有几个月了,显然,在进行一些更新之后,肯定有什么东西坏了。如果我询问服务的状态,我会得到 ( systemctl status postgresql
):
× postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: disabled)
Active: failed (Result: exit-code) since Wed 2024-02-21 16:00:22 -03; 1h 28min ago
CPU: 54ms
fev 21 16:00:22 phili systemd[1]: Starting PostgreSQL database server...
fev 21 16:00:22 phili postgres[11667]: An old version of the database format was found.
fev 21 16:00:22 phili postgres[11667]: See https://wiki.archlinux.org/index.php/PostgreSQL#>
fev 21 16:00:22 phili systemd[1]: postgresql.service: Control process exited, code=exited, >
fev 21 16:00:22 phili systemd[1]: postgresql.service: Failed with result 'exit-code'.
fev 21 16:00:22 phili systemd[1]: Failed to start PostgreSQL database server.
我已经尝试过以各种方式重新安装。但主要是这样的:
pacman -Rsn postgresql
rm -rf /var/lib/postgres
pacman -Syu postgresql
我正在安装的版本是最新的 16,但我已经在 14 上尝试过所有这些。是的,我已经多次尝试重新启动我的电脑。
当您初始化 PostgreSQL 数据库时,数据库数据将被锁定到该主要版本的 PostgreSQL。
当您升级PostgreSQL的主要版本时,您需要确保数据库数据与新版本兼容。
Arch Linux专门针对这种情况提供了一个 wiki 条目,步骤总结如下:
initdb
用于创建初始数据库的参数postgresql.service
initdb
使用与原始数据库相同的参数初始化新数据库。pg_upgrade
postgresql.service
如果没有任何错误,您的 PostgreSQL 数据库服务器现在应该使用升级后的数据库运行。如果您愿意,您现在可以清理任何旧数据和临时目录。
根据 @GracefulRestart 的一些评论,最终对我有用的是遵循8.1部分中的一些步骤:
pg_upgrade
postgresql-old-upgrade