Importa dati
COPY
tutto su un tavolo di staging temporaneo e inserisci solo nuovi titoli nella tabella di destinazione.
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;
Gli ID dovrebbero essere generati automaticamente con un serial
colonna tbl_id
in tbl
.
Il LEFT JOIN
/ IS NULL
build squalifica i titoli già esistenti. NOT EXISTS
sarebbe un'altra possibilità.
DISTINCT
impedisce duplicati nei dati in entrata nella tabella temporanea tmp
.
ANALYZE
è utile per assicurarsi che il pianificatore di query scelga un piano ragionevole e che le tabelle temporanee non vengano analizzate dall'autovacuum.
Dato che hai 3 milioni di elementi, potrebbe essere utile aumentare l'impostazione per temp_buffer
(solo per questa sessione ):
SET temp_buffers = 1000MB;
O quanto ti puoi permettere ed è abbastanza per contenere la tabella temporanea nella RAM, che è molto più veloce. Nota:deve essere fatto prima nella sessione - prima che vengano creati oggetti temporanei.
Recupera ID
Per vedere tutti gli ID per i dati importati:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
Nella stessa sessione! Una tabella temporanea viene eliminata automaticamente alla fine della sessione.