Importar dados
COPY
tudo para uma tabela de preparação temporária e insira apenas novos títulos em sua tabela 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;
Os IDs devem ser gerados automaticamente com um
serial
coluna tbl_id
em tbl
. O
LEFT JOIN
/ IS NULL
construct desqualifica títulos já existentes. NOT EXISTS
seria outra possibilidade. DISTINCT
evita duplicatas nos dados de entrada na tabela temporária tmp
. ANALYZE
é útil para garantir que o planejador de consulta escolha um plano sensato e que as tabelas temporárias não sejam analisadas pelo autovacuum. Como você tem 3 milhões de itens, pode valer a pena aumentar a configuração para
temp_buffer
(somente para esta sessão ):SET temp_buffers = 1000MB;
Ou o quanto você pode pagar e é suficiente para manter a tabela temporária na RAM, o que é muito mais rápido. Nota:deve ser feito primeiro na sessão - antes de quaisquer objetos temporários serem criados.
Recuperar IDs
Para ver todos os IDs dos dados importados:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
Na mesma sessão! Uma tabela temporária é descartada automaticamente no final da sessão.