Aangezien u het aantal/type rijen niet van tevoren weet, raad ik u aan dit als volgt te doen:
- (1) importeer je CSV in een (tijdelijke?) tabel met een enkele tekstkolom zonder te splitsen. Gebruik
backspace
teken als scheidingsteken zodat de hele geïmporteerde regel intact blijft;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) voer een query uit die de CSV splitst in een tekstarray
- functie
parse_csv
, en gebruik vervolgens de resulterende set tekstarrays zoals relevant (misschien toewijzen/invoegen in de 'echte' doeltabel)
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;
U kunt een WHERE
. toevoegen clausule in de tweede SELECT
statement om indien nodig inkomende rijen te filteren.
Een andere optie - een zeer goede naar mijn mening - is om de uitstekende file_textarray_fdw te gebruiken met min of meer hetzelfde effect.
Ik hoop dat dit je ideeën en hulp geeft.