Ponieważ nie znasz z góry liczby/rodzajów wierszy, sugeruję, abyś zrobił to w ten sposób:
- (1) zaimportuj plik CSV do (tymczasowej?) tabeli z pojedynczą kolumną tekstu bez dzielenia. Użyj
backspace
znak jako ogranicznik, dzięki czemu cały importowany wiersz pozostanie nienaruszony;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) uruchom zapytanie, które dzieli plik CSV na tablicę tekstową
- funkcja
parse_csv
, a następnie użyj wynikowego zestawu tablic tekstowych zgodnie z potrzebami (być może map/wstaw do „rzeczywistej” tabeli docelowej)
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;
Możesz dodać WHERE
klauzula w drugim SELECT
oświadczenie w celu filtrowania przychodzących wierszy, jeśli to konieczne.
Inna opcja - bardzo dobry w moim rozumieniu - jest użycie doskonałego file_textarray_fdw do mniej więcej tego samego efektu.
Mam nadzieję, że to daje pomysły i pomaga.