Importuj dane
COPY
wszystko do tymczasowej tabeli pomostowej i wstawiaj tylko nowe tytuły do tabeli docelowej.
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;
Identyfikatory powinny być generowane automatycznie z serial
kolumna tbl_id
w tbl
.
LEFT JOIN
/ IS NULL
konstrukcja dyskwalifikuje już istniejące tytuły. NOT EXISTS
byłaby inna możliwość.
DISTINCT
zapobiega duplikatom w przychodzących danych w tabeli tymczasowej tmp
.
ANALYZE
jest przydatne, aby upewnić się, że planista zapytań wybierze rozsądny plan, a tabele tymczasowe nie są analizowane przez funkcję automatycznego odkurzania.
Ponieważ masz 3 miliony przedmiotów, może być opłacalne podniesienie ustawienia dla temp_buffer
(tylko dla tej sesji ):
SET temp_buffers = 1000MB;
Lub na ile możesz sobie pozwolić i wystarczy, aby przechowywać tabelę temp w pamięci RAM, co jest znacznie szybsze. Uwaga:należy to zrobić najpierw w sesji - przed utworzeniem jakichkolwiek obiektów tymczasowych.
Pobierz identyfikatory
Aby zobaczyć wszystkie identyfikatory importowanych danych:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
W tej samej sesji! Tabela tymczasowa jest automatycznie usuwana na koniec sesji.