我正在将我的数据库从运行在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