我正在尝试将架构从远程服务器备份和恢复到本地系统。即使pg_dump
和pg_restore
报告相同的版本,后者也会失败并出现熟悉的“不受支持的版本”错误(日志如下)。我以前见过这个错误,当pg_restore
版本比 旧时pg_dump
,但在版本匹配时从未见过。可能是什么原因?
$ psql -h server.somewhere -p 5432 -U user -d database
Password for user user:
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 14.10)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
database=> SELECT version();
version
----------------------------------------------------------------------------------------------------------
PostgreSQL 14.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit
(1 row)
database=> \q
$ pg_dump --version
pg_dump (PostgreSQL) 14.10 (Ubuntu 14.10-1.pgdg22.04+1)
$ pg_restore --version
pg_restore (PostgreSQL) 14.10 (Ubuntu 14.10-1.pgdg22.04+1)
$ pg_dump -h server.somewhere -p 5432 -U user database -n schema_new -F t > ~/temp/schema_new_2024-01-29.backup
$ pg_restore -d wosis ~/temp/schema_new_2024-01-29.backup
pg_restore: error: unsupported version (1.15) in file header
Ubuntu 允许安装多个版本的 PostgreSQL 客户端工具,并根据pg_wrapper 手册页中解释的 8 步规则在运行时动态选择版本:
据推测,这里发生的情况是您安装了版本 14 和 16 的客户端工具,以及本地 PostgreSQL 服务器版本 14。
因此,当您对本地服务器执行“pg_dump --version”或“pg_restore”时,它假定您需要版本 14。
但是,当您执行“pg_dump -h some-remote-server”时,它不知道哪个版本是目标服务器,因此它使用最新版本,即版本 16。因此,您将使用版本 16 进行转储并使用版本 14 重新加载,这是不支持的。
为了避免这种情况,可以通过配置或添加命令行选项来实现多种解决方案,但最简单的一种是直接调用您想要的版本,例如使用而
/usr/lib/postgresql/16/bin/pg_dump
不是pg_dump
.您也可以卸载不需要的版本,尽管您可能会遇到依赖关系问题,并且将来的更新可能需要再次安装它们。这些包被命名为
postgresql-client-NN
.