Da du ikke kender antallet/typer af rækker på forhånd, vil jeg foreslå, at du gør sådan her:
- (1) importer din CSV til en (midlertidig?) tabel med en enkelt tekstkolonne uden opdeling. Brug
backspace
tegn som afgrænsning, så hele den importerede linje forbliver intakt;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) kør en forespørgsel, der opdeler CSV'en i et tekstarray
- funktion
parse_csv
, og brug derefter det resulterende sæt af tekstarrays som relevant (måske kortlægge/indsætte i den 'rigtige' måltabel)
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;
Du kan tilføje en WHERE
klausul i den anden SELECT
sætning for at filtrere indgående rækker, hvis det er nødvendigt.
En anden mulighed - en meget god i min forståelse - er at bruge den fremragende file_textarray_fdw til mere eller mindre samme effekt.
Håber, at dette giver dig ideer og hjælp.