für den automatisierten Import aus einer *.UNI Datei in meine Datenbank (postgres 8.4.2) habe ich eine batch Datei geschrieben, deren Inhalt ungefähr so aussieht:
In copy_parts.sql steht ein einfacher copy Befehl:
\copy parts from C:/…/PARTS.UNI
Bis jetzt hat das auch immer gut funktioniert. Aber seit ein paar Tagen bekomme ich beim Ausführen der Batch Datei die folgende Fehlermeldung:
“Error: value too long for type character varying(30)”
Wenn ich nun aber unter pgAdmin III (Version 1.10.1) im Query Tool den Befehl
copy parts from ‘C:/…/PARTS.UNI’
ausführe, wird der Import ohne Fehlermeldung durchgeführt und die Zeichen, die zu viel sind, werden abgeschnitten.
Meine Frage ist nun, warum sich das Query Tool unterschiedlich zur Kommandozeileneingabe verhält, bzw. wie ich das Verhalten des Query Tools auch für meine Batch Datei erhalte?
Wenn PGAdmin das ohne Zucken abschneidet, dann ist das MySQL-Niveau und ein Fehler. Schreibe bitte einen zünftigen Bugreport!
Und ja: wenn Du den text komplett in der DB haben willst, dann verändere den Datentyp der Spalte, TEXT ist hier eigentlich anzuraten. Wenn Du das abgeschnitten haben willst, dann editiere den Dump. Oder aber importiere in eine Zwischentabelle und von da aus mit SQL-Mitteln (substring()) in die Zieltabelle.
Liest du die gleiche Datei? In die gleiche Tabelle? Die Daten sind danach wirklich importiert?
An sich werden beide Befehle nicht vom Frontend (psql, pgAdminIII) ausgeführt, sondern direkt von der Datenbank.
Daher dürfte sich an der Ausführung nichts unterscheiden.