Vzhledem k tomu, že předem neznáte počet/typy řádků, navrhuji, abyste postupovali takto:
- (1) importujte soubor CSV do (dočasné?) tabulky s jedním sloupcem textu bez rozdělení. Použijte
backspace
znak jako oddělovač, takže celý importovaný řádek zůstane nedotčen;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) spusťte dotaz, který rozdělí CSV do textového pole
- funkce
parse_csv
a poté použijte výslednou sadu textových polí podle potřeby (možná namapujte/vložte do „skutečné“ cílové tabulky)
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;
Můžete přidat WHERE
klauzule ve druhém SELECT
aby bylo možné v případě potřeby filtrovat příchozí řádky.
Další možnost - podle mého názoru velmi dobrý - je použít vynikající file_textarray_fdw k víceméně stejnému efektu.
Doufám, že vám to poskytne nápady a pomůže.