COPY fehler

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

Ich habe diese mit vim geöffnet, mittel :ff=unix zu einer Datei mit Unix-Zeilenenden konvertiert und dann problemlos mit \i in psql eingelesen.

Andreas

gelöscht, da unwichtig

Habe die Datei auch problemlos einspielen können, ebenfalls über psql.

unglaublich ich habe es jetzt auch in psql versucht. Mit dem fehler "ungültige eingabesyntax. nur habe ich das zum ersten mal verwendet.
ich habe in psql eingegeben COPY unit (u_id, u_name, u_sort) FROM ‘d:/mein/pfad/forum.txt’; Stimmt das?

Ich habe die komplette Datei einfach mittels \i eingelesen.
Das funktioniert ohne Probleme.

Die Datei, die Du geschickt hast, enthielt am Anfang ein ‘COPY … from stdin;’ und dann die Daten. Wenn Du das so versuchst mit COPY einzulesen, dann kommt natürlich Müll bei raus. Andererseits konnte ads die Datei so mit \i direkt quasi ‘ausführen’. (ich bekam einen Fehler wegens dem Zeilenumbruch, den ich erst mit vim behob).

Andreas

ES HAT GEKLAPPT … ich danke euch für die geduld… und wünsche euch allen einen schönen tag … ihr habt meinen gerettet

Tja, und woran lag es?

Damit andere später auch mal davon profitieren können?

Hallo zusammen,

ich habe irgend wie das gleiche Problem:

Situation:
In C# wird mittels StringBuilder ein COPY-Statement erstellt:

COPY t_patient (pat_country,pat_centre,pat_id,pat_type,revision)
FROM STDIN;
CA	1	test12345	NAT	1
\.

Die Attribute pat_country, pat_centre und pat_id sind vom Typ character varying,
pat_type ist ein character(3), revision ist ein smallinteger.
(Das pat_centre ein VarChar und kein Zahlen-Typ ist hat historische Gründe)

Es kommt immer zu folgendem Fehler:

ERROR:  syntax error at or near "CA"
LINE 3: CA 1 test12345 NAT 1
        ^

********** Fehler **********

ERROR: syntax error at or near "CA"

Ich habe auch schon diverse Kombinationen mit verschiedenen Delimitern und/oder NULL-Notationen versucht ?!
Darüber hinaus habe ich auch mal mittels Editor die CRLF->LF umgewandelt.
Codierung = ANSI

Viele Grüße,
Andreas

DU erstellst das COPY als Befehl und die Daten als Stream.
Beides zusammen in einem String geht meines Wissens nicht.

Hallo ads,

vielen Dank … das war der perfekte Hinweis!

Lösung Prinzipiell nach Anleitung unter Npgsql: User’s Manual, Abschnitt Fast bulk data copy into a table.
Da wäre ich so schnell nicht drauf gekommen.

Habe die Daten in einen MemoryStream geschrieben, dessen Position anschließend auf 0 gesetzt und das ganze in ein NpgsqlCopyIn Objekt gepackt.

Im Prinzip so:

command.CommandTimeout = 300;
memoryStream.Position = 0;
NpgsqlCopyIn copyIn = new NpgsqlCopyIn(command, pgConn, memoryStream);
copyIn.Start();

Jetzt funktioniert es.

Nun ja, ich habe das vor einiger Zeit mal in meinem Buch ausführlich beschrieben, daher weiss ich das :wink:
Solches Wissen teile ich gern.