COPY fehler

Hallo zusammen

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:

COPY kategorien (kat_id parent, name) FROM stdin;
1 \N Text1
2 1 Text2
3 1 text3
4 1 text4

Ich hoffe es kann mir wer helfen.

Danke schon mal

Gruss merlin

Wenn das 3 Spalten sind, müssen da 2 Kommas stehen. Ich sehe nur eines. Und ich sehe kein abschließendes . Und auch keine Fehlermeldung von Dir.

Andreas

nein, da sind mehrere zeilen auch . ist vorhanden. Die Exception lautet:
FEHLER: Syntaxfehler bei »1«
ZEILE 3: 1 \N Text1

den ; nach stdin ist auch gesetzt.

Hier fehlt ein Komma:

COPY kategorien (kat_id parent, name) FROM stdin;

Siehst Du es nun?

Andreas

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=*#

Andreas

wenn ich dein beispiel ausprobiere erhalte ich den gleichen Fehler wie anhin:

FEHLER: Syntaxfehler bei »1«
ZEILE 2: 1 \N text1

Was verwendest Du als Delimiter? Ich .

Andreas

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.

COPY an sich ist recht mächtig (und schnell).

Andreas

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.

Selbst wenn ich es in CVS importieren will mit:

COPY kategorien (kat_id, parent, name) fROM ‘D:/CMA/Mappe1.csv’ WITH CSV;

FEHLER: ungültige Eingabesyntax für ganze Zahl: »1;\N;text1«

unglaublich…zum verzweifeln

Was ist das \N? NULL? Probier mal ein WITH NULL ‘\N’

-> PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: COPY

Wieder Fehler WARNUNG: nicht standardkonforme Verwendung von Escape in Zeichenkettenkonstante.

COPY Kategorie(kat_id, parent, name) FROM ‘D:/test/Mappe1.csv’ WITH NULL ‘\N’;


mein CVS fängt so an:

1,\N,Test1

Hallo!

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?

Gruß Uwe

Nein, nicht gleich aus dem WINDOWS springen…

Die Fehlermeldung ist doch eindeutig, oder?

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.


Andreas

Ja, Default bei COPY für NULL.

Andreas

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.

Auch das würde gehen, wenn man es richtig macht.

Andreas