错误: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 查询中获取结果集 w.r.t 日期名称