问题描述
在波兰,我们使用逗号代替小数点分隔符。我的整个数据库都使用逗号,当我想将数据导入postgrsql时出现此错误:
错误:数字类型“ 0,000”的无效输入语法 内容:copY表格1,第2行,栏销售量:“ 0,000” sql状态:22P02
如何更改Postgresql设置,使其接受逗号而不是点作为小数点分隔符?
解决方法
您必须更改配置参数lc_numeric
。可以通过在数据库启动时或在sql中即时配置参数文件来实现(有关与参数交互的其他方式,请咨询相应的docs' section)。
要在整个集群中更改设置,请使用:
ALTER SYSTEM lc_numeric TO 'pl_PL.UTF-8'; -- Check the original setting first !!!
这对于一次性工作可能不是一个好主意(而且您可能仍然没有特权)。
以下步骤说明了如何在当前SQL事务的英美和波兰数字格式约定之间切换:
-- show the current setting. let's say it is 'en_US.UTF-8'. Remember/store for later.
show lc_numeric;
-- American style.
select to_char(123456789.8765,'999G999G999D99');
-- Set to Polish convention (group separator ' ',decimal: ',')
set lc_numeric to 'pl_PL.UTF-8';
-- Polish style
select to_char(123456789.8765,'999G999G999D99');
-- Restore original value
set lc_numeric to 'en_US.UTF-8';
在Postgresql 12上进行了测试。文档SET和Locale config中的更多详细信息。