我的数据库是一个带EN_US UTF-8语言环境的Postgresv14数据库.我必须导入许多.csv文件,它们通常有一个小数点(3.14)表示实数,有时还有一个小数逗号(3,14).我的问题是:有没有一种方法可以设置postgres,使数据被正确地读入postgres?
我做了什么:我知道数据是否有小数点或逗号.在Pandas 身上,通过设置地点,这个解决方案相当优雅,比如:
# test for decimal point, set locale accordingly
decimaal_teken = meta_data.iloc[0].loc['bronbestand_decimaal']
if decimaal_teken == '.':
logger.warning(f'Floating point met decimale punt')
locale.setlocale(locale.LC_NUMERIC, 'en_EN.utf8')
elif decimaal_teken == ',':
logger.warning(f'Floating point met decimale komma')
locale.setlocale(locale.LC_NUMERIC, 'en_DK.utf8')
else:
logger.warning(f'Onbekend decimaal teken: "{decimaal_teken}", decimale punt wordt gebruikt')
locale.setlocale(locale.LC_NUMERIC, 'en_EN.utf8')
我在Postgres寻找类似的解决方案,但我找不到.我有一个测试文件,如下所示:
SET lc_numeric = 'en_DK';
-- SET DECIMALSEPARATORCOMMA=ON;
INSERT INTO public.floats (naam, value)
VALUES
('Drente', '112,5');
我通过-f或\i将文件导入到psql中.在这两种情况下,都存在112,5不是有效实数的错误.112.5是可以接受的.
我在this article中找到的DECIMALCOMMASEPARATOR在将文件导入到psql中时产生错误.我也将Linux语言环境设置为en_dk,但没有成功.
我可以用点替换逗号,但我想保持数据不变.我无法想象Postgres对此没有解决方案.有人能帮我指出一些我忽略的信息吗?
提前谢谢您!