我有一个CSV文件,其中包含从Oracle存储过程生成的ASCII编码。
我需要使用存储过程将CSV文件导入Postgres数据库表,默认情况下在postgres中set date to MDY
我昨晚在postgres终端尝试set datestyle to SQL,DMY;
。
今天早上,当我看到datastyle格式化其MDY格式时。除非在postgres.conf文件中配置,但我不需要它,因为它适用于所有数据库。
所以我需要在存储过程中导入CSV文件时设置日期样式
这是Postgres的脚本
begin
set schema 'public';
raise notice 'CSV PATH: %,TABLE NAME: %',csv_path,target_table;
execute format('truncate %I ',target_table);
execute format('copy %I from %L WITH (FORMAT csv)',target_table, csv_path);
return;
end;
答案 0 :(得分:2)
为事务使用local
设置配置。 https://www.postgresql.org/docs/current/static/sql-set.html
SESSION 是默认情况下,如果SESSION和LOCAL都没有出现
(大胆的)
例如:
t=# begin;
BEGIN
t=# set local DateStyle to ISO,DMY;
SET
t=# show DateStyle;
DateStyle
-----------
ISO, DMY
(1 row)
t=# end;
COMMIT
t=# show DateStyle;
DateStyle
-----------
ISO, MDY
(1 row)
还要注意你如何设置DateStyle - 它是一对值。
https://www.postgresql.org/docs/current/static/runtime-config-client.html
DateStyle(string)
设置日期和时间值的显示格式以及规则 用于解释模糊日期输入值。由于历史原因, 此变量包含两个独立的组件:输出格式 规范(ISO,Postgres,SQL或德语)和输入/输出 年/月/日订购规格(DMY,MDY或YMD)。这些 可以单独设置或一起设置。关键字欧元和欧洲是 DMY的同义词;关键字US,NonEuro和NonEuropean是 MDY的同义词有关更多信息,请参见第8.5节。内置 默认为ISO,MDY,但initdb将初始化配置文件 使用与所选lc_time的行为相对应的设置 区域设置。