ich möchte gerade von einer Oracle-DB auf PG umsteigen und habe nicht die geringste Ahnung, wie ich den folgenden Oracle-Code
LOAD DATA
INFILE 'myConfigFile.txt'
INTO TABLE myTable
INSERT
FIELDS TERMINATED BY ',' TRAILING NULLCOLS
(
field1,
field2,
)
für PG implementieren muss.
Der folgende Link verspricht Hoffnung, funktioniert aber nicht… mySQL
Das besondere dabei ist noch, dass auf diesem Wege lo_import() für den “Upload” einer Datei einzubauen ist.
Hat jemand einen Hinweis, wie man es lösen kann?
Eine unschöne Idee wäre die Verwendung von COPY um den Inhalt des Textfiles in die DB zu importieren, um getrennt noch die Datei hochzuladen…klingt aber nicht optimal…
Vergiss die Seite bitte ganz schnell wieder. Das hat wohl jemand von irgendeiner MySQL-Anleitung kopiert und großflächig Text da drin stehen lassen.
Diverse Befehle auf dieser Seite sind nicht für PostgreSQL sondern für MySQL gedacht.
Leider komme ich mit COPY nicht so ganz zum Ziel, denn ich möchte mit diesem SQL-Statement auch eine Datei in der DB ablegen.
Wenn ich dafür lo_import() benutze, muss mein Feld vom Typ “OID” sein, doch leider erwartet das vorhandene Programm an jener Stelle den Typ “bytea”.
gibt es eine Möglichkeit in PG über ein SQL Statement, die Datei direkt in einem Feld vom Typ bytea abzulegen?
…denn intern macht lo_import auch nichts weiter … über die Referenz der OID zu der Tabelle pg_largeobject ist der von mir gewünschte Typ “bytea” zu finden.
Die einzige Alternative, die mir einfällt ist das programmatische Einfügen der Daten beispielsweise mit einem Java-Prog., oder?
ByteA und Large Objects sind zwei grundsätzlich verschiedene Dinge. Von lo_import() hat bisher auch niemand (außer dir) gesprochen.
Dein Eingangsposting sagte auch nichts davon aus, dass du eine einzelne Datei in einem einzelnen Feld ablegen willst, sondern dass du Daten aus einer Datei laden willst.
Du verwirrst mich - vielleicht spezifizierst du mal genau, was du machen möchtest
also ich habe eine txt-Datei, die folgendermaßen aussieht:
id;name;beschreibung;pfadZuDatei
in der DB gibt es eine Tabelle:
id(numeric);name(varchar);beschreibung(varchar);fileData(bytea)
ich möchte nun die Textdatei auslesen und die Tabelle füllen(was ich mit COPY gemacht habe) , der Haken dabei ist (was ich eingangs verschwiegen habe), dass ich anhand von “pfadZuDatei” eine Datei in der DB ablegen möchte.
wenn ich dies auf dem bereits beschriebenen Weg mit lo_import() realisiere, muss ich den Datentyp des Feldes “fileData” jedoch auf OID ändern, was ich aber eigentlich vermeiden möchte, um nicht meinen Programmcode ändern zu müssen.
Normalerweise vermeide ich es ja meine eigenen Tools zu erwähnen, aber hier passt es einfach ziemlich gut.
Wenn Du nicht auf psql festgelegt bist, schau Dir mal SQL Workbench/J an.
Das hat einen eigenen Import Befehl (analog zu COPY) der auch mit solchen Dateien (also mit Verweis auf eine externe Datei für BLOB/CLOB-Spalten) umgehen kann.
Das Tool unterstützt auch eine Erweiterung im “normalen” SQL bei dem man in einem UPDATE oder INSERT Befehl für eine BLOB/CLOB Spalte eine Datei angeben kann (die dann in der Spalte gespeichert wird).
Das ganze ist ein Java-Programm und kann auch in einer Batch-Datei bzw. Shell-Skript verwendet werden.
Fragen zu dem Tool aber besser im SQL Workbench Forum (Link auf der Homepage) oder über die Support-Email (auch auf der Homepage zu finden)