【发布时间】:2015-03-13 01:41:25
【问题描述】:
我经常需要将 csv 导入 postgres,并且通常使用来自 psql 的 \copy 命令。它通常看起来像这样
\copy tbl FROM import.csv CSV
我有两个常见的问题,我觉得可能会有类似的答案。
- 在日期字符串进入
TIMESTAMP字段时对其进行解析 -
INTEGER字段中的空字符串导致错误
在这两种情况下都需要进行少量修改,但我当前的解决方案是创建加载表,所有字段都为 VARCHAR 类型,然后创建另一个具有正确架构的表。然后我使用\copy 和
CREATE TABLE loading_tbl (
datefield VARCHAR,
integerfield VARCHAR
);
CREATE TABLE tbl (
datefield TIMESTAMP,
integerfield INTEGER
);
\copy loading_tbl FROM import.csv CSV
INSERT INTO tbl (datefield, integerfield)
SELECT
to_timestamp(datefield, 'YYYY-Mon, DAY HH24:MI a.m'),
integerfield::INTEGER
FROM loading_tbl;
DROP TABLE loading_tbl;
这是最好的方法还是有更简单的方法?创建两个表有点痛苦,尤其是随着字段数量的增加。
【问题讨论】:
标签: postgresql csv psql