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.