Postgresql
將 csv 文件複製到 PostgreSQL 表中時解析 DATE
我有一長串
.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
設置
datestyle
為ISO, DMY
,您的日期將根據需要進行解析。設置該參數沒有任何問題 - 請SET
在您之前進行COPY
。無法跳過 CSV 文件中的列。向表中添加額外的列並稍後刪除它們,這很便宜。