COPY aus STDIN - Problem mit NULL

Hallo,
ich möchte gerne auch einer Ingres-DB Daten in eine PostgreSQL-DB überführen.
Beide Datenbanken laufen unter SunOS 5.10 und die Verwendete PG-Version ist die 8.1.3.

Ablauf:
Ein Shellscript holt sich per SQL-Statement die entprechende Tabelle aus der Ingres-DB (SELECT Spalte1, Spalte2,… FROM Ingres-Table…) und speichert diese temporär ab.
Per Stream-Editor (SED) wird die Textdatei umformatiert und anschließend über die COPY-Funktion in die zuvor erzeugte PortgreSQL-DB überführt.
Mein Problem:
Nach der Syntaxbeschreibung des COPY-Befehls können Trennzeichen, NULL-Werte usw angegeben werden.
Bei mir funktioniert es leider nicht ganz wie gewünscht.


COPY public.table
FROM STDIN
WITH
DELIMITER AS ‘|’
NULL AS ‘null’
;

erzeugt die Fehlermeldung

ERROR: invalid input syntax for integer: “”

Ich habe anscheinend ein Problem mit undefinierten Werten :slight_smile:

Gibt es vielleicht einen besseren Ansatz?

Viele Grüße
Chr.

Ja, Du stellst halt NULL nicht als ‘null’ dar, sondern als ‘’, was aber für einen INT-Wert falsch ist.

Andreas

Wenn ich die Doku richtig verstanden habe, sucht doch NULL AS ‘suchstring’ nach dem Suchstring und macht aus diesem Wert beim Kopieren der Daten NULL.
Dann verstehe ich nicht, warum aus ‘suchstring’ nicht NULL, sondern “” wird.


Viele Grüße
Christian

NULL as ‘bla’ bedeutet, daß NULL als ‘bla’ und nicht als ‘\N’ dargestellt wird. Damit ist nicht gesagt, daß er ‘’ als NULL interpretieren soll. Alles klar?

Andreas

Danke für die Hilfe, mein Problem ist gelöst!

Die Lösung war der zusätzliche Parameter CSV, der leere Zeichenketten als NULL erkennt.
Jetzt ist alles so wie ich es wollte.

Gruß
Christian