postgresql - insertar - Comando COPY: copia solo columnas específicas de csv
insertar csv en postgresql (1)
Tenía una pregunta sobre el comando COPY
en PostgreSQL. Tengo un archivo CSV que solo quiero copiar algunos de los valores de las columnas en mi tabla PostgreSQL.
¿Es posible hacer esto? Estoy familiarizado con el uso del comando COPY
para copiar todos los datos de un CSV en una tabla usando el encabezado para mapear los nombres de las columnas, pero ¿cómo es posible cuando solo deseo algunas de las columnas?
Preprocesar el archivo CSV o (lo que probablemente haría) importar en una copia temporal de la tabla de destino e INSERT
solo las columnas seleccionadas en un segundo paso:
CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0;
ALTER TABLE tmp ADD COLUMN etra_column1 text
, ADD COLUMN etra_column2 text; -- add excess columns
COPY tmp FROM ''/path/tp/file.csv'';
INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM tmp -- only reelvant columns
WHERE ... -- optional, to also filter rows
Una tabla temporal se descarta automáticamente al final de la sesión. Si el procesamiento lleva más tiempo, use una tabla común.