sql >> Base de Datos >  >> RDS >> PostgreSQL

POSTGRES COPIA DEL PROGRAMA en una tabla dinámica con columnas desconocidas

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.