提问人:Guasqueño 提问时间:8/18/2023 最后编辑:AlbinaGuasqueño 更新时间:8/25/2023 访问量:53
尝试将日期时间值导入 Postgresql 表时出错
Error trying to import datetime value into a Postgresql table
问:
我有一个包含几列的 csv 文件,其日期时间值的格式如下:.我正在尝试使用 DBeaver 中内置的导入功能以及使用 postgresql COPY 语句导入数据。两者都失败了。'2008-12-03-18.01.46.000916'
我在 DBeaver 中使用作为导入格式,但我没有看到一种方法可以告诉 COPY 使用日期时间格式来读取它。我尝试了你在这里看到的,但它不起作用:'yyyy-MM-dd-HH.mm.ss.SSS'
DATEFORMAT
COPY myTable FROM '/tmp/myDataWithDotsInTime.csv'
WITH (FORMAT csv, HEADER false, DELIMITER ',', DATEFORMAT 'yyyy-MM-dd-HH.mm.ss');
Postgresql 函数使用与 DBeaver 不同的格式并且有效,但我找不到告诉 COPY 使用它的方法:to_datetime
SELECT CURRENT_TIMESTAMP, to_timestamp('2008-12-03-18.01.46.000916', 'YYYY-MM-DD-HH24.MI.SS') AS ts
答:
1赞
Stefanov.sm
8/18/2023
#1
在类似的情况下(需要特定的格式或转换),我使用以下方法,足够通用,通常可以解决问题。
- 创建一个类似于将时间戳列作为文本的临时表;
mytable
copy
进入临时表;insert
into 替换为 select from temporary table。mytable
假设 中的目标字段是mytable
ts
create temporary table the_temporary_table (like myTable);
alter table the_temporary_table alter ts type text;
COPY myTable -- Your COPY statement w/o DATEFORMAT
FROM '/tmp/myDataWithDotsInTime.csv'
WITH
(
FORMAT csv,
HEADER false,
DELIMITER ','
);
insert into myTable
select <..fields before ts..>,
to_timestamp(ts, 'YYYY-MM-DD-HH24.MI.SS.US') ts,
<..fields after ts..>
from the_temporary_table;
0赞
Guasqueño
8/19/2023
#2
我能够通过在最后(在导入设置中)以微秒的格式添加额外的 SSS 来使用 DBeaver,以满足如下输入标准:
yyyy-MM-dd-HH.mm.ss.SSSSSS
感谢 DBeaver 支持人员。
还要感谢 Stefanov.sm 提供与 COPY 语句配合使用的变通解决方案。但是,就我而言,我更喜欢 DBeaver 解决方案,因为我可以从我的 PC 导入我的 CSV 文件,而不必将 CSV 文件复制到 Linux 后端以使用 COPY。
评论
copy
作为文本插入到临时表格中,然后从中选择插入。mytable