2013-04-16 11 views
5

Ich habe Daten so etwas wie diese:Import CSV-Textfeld in PostgreSQL 9.2

Akhoond, 1, Akhoond, "{" "Akhund" " "" Akhwan ""}", 0

Der Import von pgAdmin lehnt dies ab. In welchem ​​Format muss der Text [] in der CSV-Datei enthalten sein?

Ich habe auch versucht dies:

Akhoond, 1, Akhoond "{Akhund, Akhwan}", 0

Hier ist die Tabelle erstellen:

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

Fehlermeldung (en)? –

+0

Es wirft "zusätzliche Daten nach der letzten erwarteten Spalte". Ich habe überprüft und es gibt 5 Spalten in der DB und 5 in der CSV. – IamIC

+1

Was passiert, wenn Sie eine Dummy-Tabelle mit einer oder zwei Zeilen der gewünschten Daten von Hand erstellen und dann aus PgAdmin-III exportieren? Welches Format produziert es und importiert es dann korrekt? Wenn es exportiert, aber nicht importiert, haben Sie einen Fehler gefunden. Ehrlich gesagt, ich denke, es ist ein Fehler, wenn er nicht immer die gleiche Syntax wie der Standardbefehl "COPY" verwendet. –

Antwort

8

Die beste So finden Sie eine Tabelle mit den gewünschten Werten und COPY ... TO STDOUT zu sehen:

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 

So sieht es aus wie "{Akhund,Akhwan}" ist in Ordnung. Beachten Sie, dass das zweite Beispiel, das ich hinzugefügt habe und zeigt, wie man mit Kommas umgeht, Leerzeichen im Array-Text angibt.

Dies funktioniert mit dem Befehl psql \copy; wenn es nicht Arbeit mit PgAdmin-III dann würde ich vorschlagen, psql und \copy.

+0

Es funktioniert für PgAdmin III. – pisaruk