Importera data
COPY allt till ett tillfälligt mellanrum och infoga endast nya titlar i din måltabell.
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:n bör genereras automatiskt med en serial kolumn tbl_id i tbl .
LEFT JOIN / IS NULL konstruktion diskvalificerar redan existerande titlar. NOT EXISTS skulle vara en annan möjlighet.
DISTINCT förhindrar dubbletter i inkommande data i den temporära tabellen tmp .
ANALYZE är användbart för att se till att frågeplaneraren väljer en vettig plan och att tillfälliga tabeller inte analyseras med autovakuum.
Eftersom du har 3 miljoner objekt kan det löna sig att höja inställningen för temp_buffer (endast för denna session ):
SET temp_buffers = 1000MB;
Eller hur mycket du har råd med och räcker för att hålla tempbordet i RAM, vilket är mycket snabbare. Obs:måste göras först i sessionen - innan några tillfälliga objekt skapas.
Hämta ID:n
Så här ser du alla ID:n för den importerade datan:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
I samma session! En tillfällig tabell släpps automatiskt i slutet av sessionen.