我正在尝试将 9.5 服务器升级到 9.6,但 pg_upgrade 给出了以下错误:
Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* system OID user data types ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for roles starting with 'pg_' ok
Creating dump of global objects ok
Creating dump of database schemas
ok
Checking for presence of required libraries fatal
Your installation references loadable libraries that are missing from the
new installation. You can add these libraries to the new installation,
or remove the functions using them from the old installation. A list of
problem libraries is in the file:
loadable_libraries.txt
其中包含:
could not load library "$libdir/rtpostgis-2.2":
ERROR: could not access file "$libdir/rtpostgis-2.2": No such file or directory
当我启动服务器并运行“CREATE EXTENSION postgis”然后停止服务器时,pg_upgrade 会给我一个关于非空数据库的错误:
New cluster database "postgres" is not empty
因此,我陷入了困境——如果不安装扩展,我就无法升级,但一旦我这样做,它就会认为数据库不为空。
有什么解决办法吗?
答案1
问题是 postgis扩大旧集群中的版本与图书馆版本。因此,当它尝试迁移数据库时,它找不到扩展的旧版本。
为了解决这个问题,对于每个my_database
安装了 postgis 扩展的程序,运行:
psql my_database postgres -c 'ALTER EXTENSION postgis UPDATE TO "2.3.2";'
在里面老的集群。然后运行 pg_update。
答案2
您的 9.6 安装可能包含 postgis 2.3 和相应的 rtpostgis-2.3 库。如果您的 9.6 安装中有 postgis 2.2 库,则 pg_upgrade 应该可以正常工作。
如果您需要 postgis 2.3,您可能需要 pg_dumpall 和 pg_restore。
答案3
我想从 PostGis 2.4.4 升级到 3.0.2,但出现了同样的错误信息。对我来说,使用以下命令手动安装缺失的包很有帮助:
psql -d my_database -f /usr/share/postgresql/10/contrib/postgis-3.0/rtpostgis.sql