Import dat
COPY
vše do dočasné pracovní tabulky a do cílové tabulky vkládat pouze nové názvy.
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;
ID by měla být generována automaticky s serial
sloupec tbl_id
v tbl
.
LEFT JOIN
/ IS NULL
konstrukt diskvalifikuje již existující tituly. NOT EXISTS
byla by další možnost.
DISTINCT
zabraňuje duplicitám v příchozích datech v dočasné tabulce tmp
.
ANALYZE
je užitečné, abyste se ujistili, že plánovač dotazů vybere rozumný plán a dočasné tabulky nebudou analyzovány autovakuem.
Protože máte 3 miliony položek, může se vyplatit zvýšit nastavení pro temp_buffer
(pouze pro tuto relaci ):
SET temp_buffers = 1000MB;
Nebo kolik si můžete dovolit a stačí to k udržení tabulky temp v RAM, což je mnohem rychlejší. Poznámka:musí být provedeno nejdříve v relaci - před vytvořením jakýchkoli dočasných objektů.
Načíst ID
Chcete-li zobrazit všechna ID pro importovaná data:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
Ve stejné relaci! Dočasná tabulka je na konci relace automaticky zrušena.