Daten importieren
COPY
alles zu einem temporären Bereitstellungstisch und nur neue Titel in Ihre Zieltabelle einfügen.
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;
IDs sollten automatisch mit einer serial
generiert werden Spalte tbl_id
in tbl
.
Der LEFT JOIN
/ IS NULL
Konstrukt disqualifiziert bereits bestehende Titel. NOT EXISTS
wäre eine andere Möglichkeit.
DISTINCT
verhindert Duplikate in den eingehenden Daten in der temporären Tabelle tmp
.
ANALYZE
ist nützlich, um sicherzustellen, dass der Abfrageplaner einen vernünftigen Plan auswählt und temporäre Tabellen nicht durch Autovacuum analysiert werden.
Da Sie 3 Millionen Artikel haben, kann es sich lohnen, die Einstellung für temp_buffer
zu erhöhen (nur für diese Sitzung ):
SET temp_buffers = 1000MB;
Oder wie viel Sie sich leisten können und ausreicht, um die temporäre Tabelle im RAM zu halten, was viel schneller ist. Hinweis:Muss zuerst durchgeführt werden in der Sitzung - bevor temporäre Objekte erstellt werden.
IDs abrufen
So sehen Sie alle IDs für die importierten Daten:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
In derselben Sitzung! Eine temporäre Tabelle wird am Ende der Sitzung automatisch gelöscht.