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



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

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

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

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之间有一个狭窄的无制动空间字符-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

最新更新