Textdateien mit Postgres laden

Hallo,

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…


Danke im Voraus für hilfreiche Hinweise
HansPeter

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.

Nun, was du suchst, ist ev. COPY:
PostgreSQL: Documentation: Manuals: PostgreSQL 8.4: COPY

Ich hab den Menschen mal angeschrieben, dessen E-Mail Adresse da unten auf der Webseite steht.

Autsch, ich hab auch grad mal die Seite mir angeschaut. Das ist einfach nur zensiert, was dort steht…

Und ja, COPY scheint die Lösung für das Problem zu sein.

Andreas

Ich auch, BCC an Dich, grad eben …

Vielen Dank für die schnellen Antworten, ich werde es gleich mal probieren

Schönes Wochenende!
Grüße
HansPeter

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?

Hinweise sind willkommen :slight_smile:

Danke schon mal

Grüße
HansPeter

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 :wink:

beides möchte ich machen :slight_smile:

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.


bin ich auf dem Holzweg?

HansPeter

“pfadZuDatei” ist der Pfad zu einer Datei, die mit der Textdatei nichts zu tun hat …

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)

Ja, soweit war ich jetzt auch schon :wink:

Du hast also zwei Probleme gemixt …


Hmm, erst mal keine Ahnung Eis essen tu
Was ist denn in den Dateien drin?

da sind Bausteine für ein Worddokument und Dokumentvorlagen enthalten

Nimm besser ein externes Programm.

Danke nochmal für die Infos…hab mir ein kleines Java Prog geschrieben