Postgresql

postgresql - 使用自定義類型導入 CSV 數據

  • July 13, 2018

我主要是數據庫的新手,並且正在建構一系列課程中學生成績的 postgres 數據庫。我的數據庫使用一種稱為“類”的類型,它由課程、學期(年和季度)和節號(1,2,3,…)組成,例如(‘Bio 101’, (17, ‘F’),1)。我正在嘗試將包含此類數據的 CSV 複製到表中,並收到一條錯誤消息,提示ERROR: extra data after last expected column. 我試過 pgAdmin III 導入嚮導、COPY 和 \copy,結果都一樣。但是,手動從文件中複製一行並導入它(使用適當的括號)可以正常工作。發生了什麼事,我能做什麼?

這是表格和一些數據:

CREATE TABLE public."GradedItems"
(
 class class NOT NULL,
 category text NOT NULL,
 "number" smallint NOT NULL DEFAULT 1,
 topic text[],
 points integer,
 weight double precision, -- Weight of item within category
 CONSTRAINT primary_key PRIMARY KEY (class, category, number)
)


'class','category','number','points'
('LS 30A', (18, 'W'), 2),'Homework',1,60
('LS 30A', (18, 'W'), 2),'Homework',2,36

發生的情況是列名稱數和數據中的列數不匹配。如果沒有關於如何生成 csv 以及如何導入的資訊,很難說,但是假設 csv 上的分隔符是逗號字元,這就是數據庫插入操作試圖做的事情:它讀取這個 'class','category','number','points' 並學習如何映射四列。然後,當它到達第二行時,它會用逗號分割數據,因此它將該行解釋為

('LS 30A'||(18||'W')|| 2)||'Homework'||1||60

其中||表示值之間的中斷。它將命令解釋為:

set 
 class = ('LS 30A',
 category = (18,
 number = 'W',
 points = 2)

…然後它不知道如何處理其餘數據,因為它不適合。

我的建議是使用不同的分隔符。這將取決於如何生成 csv 你如何做到這一點。

引用自:https://dba.stackexchange.com/questions/209980