Da Sie die Anzahl/Art der Zeilen im Voraus nicht kennen, würde ich vorschlagen, dass Sie Folgendes tun:
- (1) Importieren Sie Ihre CSV-Datei in eine (temporäre?) Tabelle mit einer einzigen Textspalte ohne Aufteilung. Verwenden Sie die
backspace
Zeichen als Trennzeichen, damit die gesamte importierte Zeile intakt bleibt;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) Führen Sie eine Abfrage aus, die die CSV-Datei in ein Textarray aufteilt
- Funktion
parse_csv
, und verwenden Sie dann den resultierenden Satz von Textarrays nach Bedarf (möglicherweise zuordnen/in die 'echte' Zieltabelle einfügen)
WITH rawdata AS
(
SELECT parse_csv(rawtext) arr FROM rawtext_t
)
INSERT INTO real_t (...fields...)
SELECT arr[1], arr[3], ...
FROM rawdata;
TRUNCATE TABLE rawtext_t;
Sie können ein WHERE
hinzufügen -Klausel im zweiten SELECT
-Anweisung, um ggf. eingehende Zeilen zu filtern.
Eine weitere Option - meiner Meinung nach sehr gut - ist die Verwendung des hervorragenden file_textarray_fdw zu mehr oder weniger dem gleichen Effekt.
Ich hoffe, dass dies Ihnen Ideen und Hilfestellungen gibt.