Importer des données
COPY
tout sur une table intermédiaire temporaire et n'insérez que de nouveaux titres dans votre tableau cible.
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;
Les identifiants doivent être générés automatiquement avec un serial
colonne tbl_id
dans tbl
.
Le LEFT JOIN
/ IS NULL
construire disqualifie les titres déjà existants. NOT EXISTS
serait une autre possibilité.
DISTINCT
empêche les doublons dans les données entrantes dans la table temporaire tmp
.
ANALYZE
est utile pour s'assurer que le planificateur de requêtes choisit un plan raisonnable et que les tables temporaires ne sont pas analysées par autovacuum.
Puisque vous avez 3 millions d'éléments, il peut être avantageux d'augmenter le paramètre pour temp_buffer
(pour cette session uniquement ):
SET temp_buffers = 1000MB;
Ou ce que vous pouvez vous permettre et c'est suffisant pour contenir la table temporaire dans la RAM, ce qui est beaucoup plus rapide. Remarque :doit être effectué en premier dans la session - avant la création de tout objet temporaire.
Récupérer les identifiants
Pour voir tous les identifiants des données importées :
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
Dans la même séance ! Une table temporaire est supprimée automatiquement à la fin de la session.