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

Posted

技术标签:

【中文标题】错误:Postgresql 中的日期/时间字段值超出范围【英文标题】:ERROR: date/time field value out of range in Postgresql 【发布时间】:2017-05-25 05:48:26 【问题描述】:

我有一个从 Oracle 存储过程生成的 ASCII 编码的 CSV 文件。

我需要使用存储过程将 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;

【问题讨论】:

我回滚到以前的版本,因为你没有编辑它 - 你问了一个新问题。请让新人这样做 这里是永久设置日期样式的链接dba.stackexchange.com/questions/19679/… “所以我需要在存储过程中导入CSV文件时设置日期样式”?... 我认为在不准确的不同方法中最好使用数据库命令 【参考方案1】:

设置交易使用的配置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

日期样式(字符串)

设置日期和时间值的显示格式以及规则 用于解释不明确的日期输入值。由于历史原因, 这个变量包含两个独立的组件:输出格式 规范(ISO、Postgres、SQL 或德语)和输入/输出 年/月/日排序规范(DMY、MDY 或 YMD)。这些 可以单独设置,也可以一起设置。关键字 Euro 和 European 是 DMY 的同义词;关键字 US、NonEuro 和 NonEuropean 是 MDY 的同义词。有关详细信息,请参阅第 8.5 节。内置的 默认是ISO,MDY,但是initdb会初始化配置文件 具有与所选 lc_time 的行为相对应的设置 语言环境。

【讨论】:

以上是关于错误:Postgresql 中的日期/时间字段值超出范围的主要内容,如果未能解决你的问题,请参考以下文章

如何比较 Postgresql 中日期时间字段中的日期?

如何在 postgresql 视图中获取两个日期时间字段的天数和小时数差异?

将时间戳与查询中的日期名称相等,并在 PostgreSQL 查询中获取结果集 w.r.t 日期名称

PostgreSQL 在按日期索引的时间戳字段上按日期搜索性能不佳

postgresql 将数字转换为日期和格式

postgresql中的日期差异