Dado que no conoce el número/tipo de filas por adelantado, le sugiero que haga lo siguiente:
- (1) importe su CSV en una tabla (¿temporal?) con una sola columna de texto sin dividir. Usa
backspace
carácter como delimitador para que toda la línea importada permanezca intacta;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) ejecute una consulta que divida el CSV en una matriz de texto
- función
parse_csv
, y luego use el conjunto resultante de matrices de texto según corresponda (tal vez mapear/insertar en la tabla de destino 'real')
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;
Puedes agregar un WHERE
cláusula en el segundo SELECT
declaración para filtrar las filas entrantes si es necesario.
Otra opción - uno muy bueno en mi opinión - es usar el excelente file_textarray_fdw con más o menos el mismo efecto.
Espero que esto te dé ideas y ayuda.