Ich versuche schon seit Tagen diesen Copy befehl zum laufen zu bringen. ich habe einen dump erhalten und will diesen in meine DB importieren. Die Datenbanken konnte ich schon wieder herstellen aber die daten wollen nicht. hier mal ein stück vom Syntax:
ju habs gesehen, mein fehler beim posten, im original syntax ist das komma gesetzt… sorry für die verwirrung. Aber der fehler muss bei was anderem liegen.
test=# create table kategorien (id int, parent int, name text);
CREATE TABLE
test=*# copy kategorien(id, parent, name) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1 \N text1
>> 2 1 text2
>> 3 1 text3
>> 4 1 text4
>> \.
test=*# select * from kategorien;
id | parent | name
----+--------+-------
1 | | text1
2 | 1 | text2
3 | 1 | text3
4 | 1 | text4
(4 rows)
test=*#
Explizit habe ich im Syntax keinen angegeben. So wie es aussieht sind die Daten Tab separiert.
Und Arbeite noch nicht lange mit PostgreSQL. Ich habe schon in verschiedenen Foren nachgesehen und die Kopieren alles Daten anhand eines CVS nur leider habe ich die Daten so erhalten. Dachte nicht das das so ein grosser aufwand wird nur um daten zu importieren.
Wer oder was hindert Dich, das mal zu untersuchen? Vielleicht sind es auch die Zeilenümbrüche. Was für ein OS (von wo die Daten kommen, wo PG läuft)?
Und Arbeite noch nicht lange mit PostgreSQL. Ich habe schon in verschiedenen Foren nachgesehen und die Kopieren alles Daten anhand eines CVS nur leider habe ich die Daten so erhalten. Dachte nicht das das so ein grosser aufwand wird nur um daten zu importieren.
hmmm, ich arbeite auf windows mit pgAdmin3.
Wie kann ich das prüfen? Ich habe das ganze in einem zip file erhalten und importiere den Dump (unterdessen nur noch die daten) in das Query tool.
Nimm einen Editor wie z.B. Ultraedit und stutze die dort die Daten so hin wie es dir gefällt, bzw es halt geht. Das geht damit durch Spaltenmodus oder Regular Expressions recht gut, auch mit Tabs und anderen Sonderzeichen. Auch 5-10 Minuten des Handbuchbuchlesens zum Thema ‘Copy’ dürften gut investiert sein. Stimmen denn die Datentypen in der Tabelle und der Delimiter mit dem csv überein?
CSV steht für Comma Separated Values. Dein Separator ist aber ein ;. Daher versucht er, den String “1;\N;text1” als ganze Zahl zu interpretieren. Logisch, daß das gegen die Wand geht.
Was also tun?
Dem COPY-Befehl sagen, das als Delimiter ein ‘;’ kommt.
Wie wäre es, wenn du mal die Datei, die du einspielen möchtest, hier anhängst? Offensichtlich liegt das Problem an genau dieser Datei, dann könnten wir da mal genauer schauen.
Der import klappt aber leider nur über cvs. direkt über das SQL scheint es nicht zu wollen. Aber ich danke euch für euere hilfe. Bin froh wenn es so mal klappt.