2013-04-16 56 views
5

我有數據是這樣的:導入CSV文本數組的PostgreSQL 9.2

阿訇,1,阿訇, 「{」, 「阿訇」 「 」「 Akhwan 」「}」,0

pgAdmin的進口拒絕這一點。文本[]需要在CSV中使用什麼格式?

我也試過這樣:

阿訇,1,阿訇, 「{阿訇,Akhwan}」,0

這裏的表創建:

CREATE TABLE private."Titles" 
(
    "Abbrev" text NOT NULL, 
    "LangID" smallint NOT NULL REFERENCES private."Languages" ("LangID"), 
    "Full" text NOT NULL, 
    "Alt" text[], 
    "Affix" bit 
) 
WITH (
    OIDS=FALSE 
); 

ALTER TABLE private."Titles" ADD PRIMARY KEY ("Abbrev", "LangID"); 

CREATE INDEX ix_titles_alt ON private."Titles" USING GIN ("Alt"); 

ALTER TABLE private."Titles" 
    OWNER TO postgres; 
+0

錯誤信息? –

+0

它在最後一個預期的列之後拋出「額外的數據」。我已檢查過,數據庫中有5列,CSV中有5列。 – IamIC

+1

如果您手動創建一行或兩行所需數據的虛擬表,然後從PgAdmin-III中導出它?它會生成什麼格式,然後才能正確導入它?如果它導出但不導入,你會發現一個錯誤。坦率地說,我認爲這是一個錯誤,如果它不使用與標準的'COPY'命令相同的語法。 –

回答

8

最好找出方法是創建一個具有期望值的表格並且COPY ... TO STDOUT看到:

craig=> CREATE TABLE copyarray(a text, b integer, c text[], d integer); 
CREATE TABLE 
craig=> insert into copyarray(a,b,c,d) values ('Akhoond',1,ARRAY['Akhund','Akhwan'],0); 
INSERT 0 1 
craig=> insert into copyarray(a,b,c,d) values ('Akhoond',1,ARRAY['blah with spaces','blah,with,commas''and"quotes'],0); 
INSERT 0 1 
craig=> \copy copyarray TO stdout WITH (FORMAT CSV) 
Akhoond,1,"{Akhund,Akhwan}",0 
Akhoond,1,"{""blah with spaces"",""blah,with,commas'and\""quotes""}",0 

所以它看起來像"{Akhund,Akhwan}"是好的。請注意,我添加的第二個示例顯示瞭如何處理逗號,數組文本中的引號空格。

這適用於psql \copy命令;如果它與PgAdmin-III一起工作,那麼我建議使用psql\copy

+0

它適用於PgAdmin III。 – pisaruk