COPY fehler

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

nur wie??? mir wäre es noch so recht wenn dies laufen würde. da der Aufwand wirklich gross ist um alles tabellen mit den daten in cvs umzuwandeln. ich verstehe den fehler nicht den es gibt beim direkten aufruf.

Warum hörst Du nicht auf ads und zeigst mal Deine Datei?

Wir können hier nur raten, wie diese aufgebaut sein könnte, und wenn wir richtig raten, zeigen wir Dir auch, wie es geht.

Neuer Rateversuch:

test=# create table kategorien (id int, parent int, name text);
CREATE TABLE
test=*# copy kategorien(id, parent, name) from stdin csv delimiter as ';' null as '\\N';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1;\N;foo
>> \.
test=*# select * from kategorien;
 id | parent | name
----+--------+------
  1 |        | foo
(1 row)

Andreas

Also hier im anhang eine tabelle zum füllen