Importér data
COPY
alt til et midlertidigt iscenesættelsesbord og indsæt kun nye titler i din måltabel.
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'er skal genereres automatisk med en serial
kolonne tbl_id
i tbl
.
LEFT JOIN
/ IS NULL
konstruktion diskvalificerer allerede eksisterende titler. NOT EXISTS
ville være en anden mulighed.
DISTINCT
forhindrer dubletter i de indgående data i den midlertidige tabel tmp
.
ANALYZE
er nyttig for at sikre, at forespørgselsplanlæggeren vælger en fornuftig plan, og at midlertidige tabeller ikke analyseres af autovakuum.
Da du har 3 millioner varer, kan det betale sig at hæve indstillingen for temp_buffer
(kun for denne session ):
SET temp_buffers = 1000MB;
Eller hvor meget du har råd til og er nok til at holde vikarbordet i RAM, hvilket er meget hurtigere. Bemærk:skal gøres først i sessionen - før der oprettes midlertidige objekter.
Hent ID'er
For at se alle ID'er for de importerede data:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
I samme session! En midlertidig tabel slettes automatisk i slutningen af sessionen.