错误:Postgresql中的日期/时间字段值超出范围

时间:2017-05-25 05:48:26

标签: postgresql csv stored-procedures stored-functions

我有一个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;

1 个答案:

答案 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的行为相对应的设置   区域设置。