Gegevens importeren
COPY
alles naar een tijdelijke verzameltabel en voeg alleen nieuwe titels toe aan uw doeltabel.
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's moeten automatisch worden gegenereerd met een serial
kolom tbl_id
in tbl
.
De LEFT JOIN
/ IS NULL
construct diskwalificeert reeds bestaande titels. NOT EXISTS
zou een andere mogelijkheid zijn.
DISTINCT
voorkomt duplicaten in de binnenkomende gegevens in de tijdelijke tabel tmp
.
ANALYZE
is handig om ervoor te zorgen dat de queryplanner een verstandig plan kiest en dat tijdelijke tabellen niet door autovacuüm worden geanalyseerd.
Aangezien je 3 miljoen items hebt, kan het lonen om de instelling voor temp_buffer
te verhogen (alleen voor deze sessie ):
SET temp_buffers = 1000MB;
Of hoeveel u zich ook kunt veroorloven en het is genoeg om de tijdelijke tabel in RAM te houden, wat veel sneller is. Opmerking:moet eerst worden gedaan in de sessie - voordat er tijdelijke objecten worden gemaakt.
ID's ophalen
Om alle ID's voor de geïmporteerde gegevens te zien:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
In dezelfde sessie! Een tijdelijke tafel wordt automatisch verwijderd aan het einde van de sessie.