我有一长串.csv
文件,我想将它们导入本地数据库。DATE
我相信我的查询是正确的,但是在解析和TIMESTAMP
列方面存在一些问题。PostgreSQL 读取这些列时需要 ISO 格式“yyyy/mm/dd”,但我的数据有另一种格式:“dd/mm/yyyy”。
我在网上和其他 Stack Overflow 上阅读SET
了datestyle
可以有所不同的答案,但不建议这样做。
有没有办法指定要导入的列的格式?另外,我不需要从 csv 文件中导入所有列:我可以省略一些吗?
细节
首先,我编写了创建表的代码(如果列名是意大利语,很抱歉,但这并不重要):
CREATE TABLE IF NOT EXISTS bikes (
bici INT,
tipo_bici VARCHAR(20),
cliente_anonimizzato INT,
data_riferimento_prelievo DATE,
data_prelievo TIMESTAMP,
numero_stazione_prelievo INT,
nome_stazione_prelievo TEXT,
slot_prelievo SMALLINT,
data_riferimento_restituzione DATE,
data_restituzione TIMESTAMP,
numero_stazione_restituzione INT,
nome_stazione_restituzione TEXT,
slot_restituzione SMALLINT,
durata VARCHAR(10),
distanza_totale REAL,
co2_evitata REAL,
calorie_consumate REAL,
penalità CHAR(2)
);
然后我添加查询以将数据复制到表中:
COPY bikes(
bici,
tipo_bici,
cliente_anonimizzato,
data_riferimento_prelievo,
data_prelievo,
numero_stazione_prelievo,
nome_stazione_prelievo,
slot_prelievo,
data_riferimento_restituzione,
data_restituzione,
numero_stazione_restituzione,
nome_stazione_restituzione,
slot_restituzione,
durata,
distanza_totale,
co2_evitata,
calorie_consumate,
penalità
)
FROM '/Users/luca/tesi/data/2019q3.csv'
DELIMITER ','
CSV HEADER;
代码看起来不错,除了弹出以下错误:
ERROR: date/time field value out of range: "31/07/2019"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY bikes, line 25296, column data_riferimento_restituzione: "31/07/2019"
SQL state: 22008
如何CREATE TABLE
在代码部分中指定要解析的格式?另外,我实际上并不需要这个 csv 的所有 cols,我该如何将它们排除在外?我试图只指定我需要的那些,但我得到一个导入错误:
ERROR: extra data after last expected column