由于不同的货币格式,无法将备份从 postgres 导入到具有相同版本的 postgres 的不同服务器

Can't import backup from postgres to different server with the same version of postgres because of different monetary format

我正在将我的数据库从 Debian 7.11 上的 Postgres 9.1.23 运行ning 移动到另一台装有 Debian 10 上的 Postgres 9.1.24 运行ning 的服务器,但我无法导入一个使用 money 数据类型的数据库,因为我收到输入语法错误

COPY failed for table "x": ERROR:  invalid input syntax for type money: "zł4.400,00"

我在 Debian 7.11 上的两个 Postgres 服务器上使用相同的语言环境:

postgres=# show lc_collate;
 lc_collate
-------------
 pl_PL.UTF-8
(1 row)

postgres=# show lc_monetary;
 lc_monetary
-------------
 pl_PL.UTF-8
(1 row)

在 Debian 10 上:

postgres=# show lc_collate;
 lc_collate
-------------
 pl_PL.UTF-8
(1 wiersz)

postgres=# show lc_monetary;
 lc_monetary
-------------
 pl_PL.UTF-8
(1 wiersz)

然而,当我尝试在两台服务器上 运行 select '12345'::money; 时,我得到不同的结果,在 Debian 7.11 上:

postgres=# select '12345'::money;
    money
-------------
 zł12.345,00
(1 row)

在 Debian 10 上:

postgres=# select '12345'::money;
    money
-------------
 zł12 345,00
(1 wiersz)

(在 Debian 10 2 和 3 之间有一个狭窄的无制动器 space 字符 - 0x202F UTF-16)

我需要什么才能成功无误地导入它?谢谢你的帮助。

肯定是 GNU C 库在这些版本之间改变了 LC_MONETARY 的想法。

我会使用 C 语言环境进行转储和恢复:

PGOPTIONS='-c lc_monetary=C' pg_dump -F c -f dumpfile dbname
PGOPTIONS='-c lc_monetary=C' pg_restore -d newdbname dumpfile