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.