Importar datos
COPY
todo a una mesa de montaje temporal e inserte solo títulos nuevos en su tabla de destino.
CREATE TEMP TABLE tmp(title text);
COPY tmp FROM 'path/to/file.csv';
ANALYZE tmp;
INSERT INTO tbl
SELECT DISTINCT tmp.title
FROM tmp
LEFT JOIN tbl USING (title)
WHERE tbl.title IS NULL;
Los ID deben generarse automáticamente con un serial
columna tbl_id
en tbl
.
El LEFT JOIN
/ IS NULL
construir descalifica los títulos ya existentes. NOT EXISTS
sería otra posibilidad.
DISTINCT
evita duplicados en los datos entrantes en la tabla temporal tmp
.
ANALYZE
es útil para asegurarse de que el planificador de consultas elija un plan sensato y que las tablas temporales no sean analizadas por autovacuum.
Dado que tiene 3 millones de elementos, podría valer la pena aumentar la configuración de temp_buffer
(solo para esta sesión ):
SET temp_buffers = 1000MB;
O por mucho que pueda pagar y sea suficiente para mantener la tabla temporal en RAM, que es mucho más rápido. Nota:debe hacerse primero en la sesión, antes de que se creen objetos temporales.
Recuperar identificaciones
Para ver todos los ID de los datos importados:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
¡En la misma sesión! Una tabla temporal se elimina automáticamente al final de la sesión.