Импортиране на данни
COPY
всичко ввременна таблица за преобразуване и вмъкнете само нови заглавия във вашата целева таблица.
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;
Идентификаторите трябва да се генерират автоматично с serial
колона tbl_id
в tbl
.
LEFT JOIN
/ IS NULL
construct дисквалифицира вече съществуващи заглавия. NOT EXISTS
би било друга възможност.
DISTINCT
предотвратява дублирането на входящите данни във временната таблица tmp
.
ANALYZE
е полезно, за да се уверите, че плановникът на заявки избира разумен план и временните таблици не се анализират чрез автоматично вакуумиране.
Тъй като имате 3 милиона артикула, може да си струва да повишите настройката за temp_buffer
(само за тази сесия ):
SET temp_buffers = 1000MB;
Или колкото можете да си позволите и е достатъчно, за да държите temp таблицата в RAM, което е много по-бързо. Забележка:трябва да се направи първо в сесията - преди да бъдат създадени временни обекти.
Извличане на идентификатори
За да видите всички идентификатори за импортираните данни:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
В същата сесия! Временна таблица се отпада автоматично в края на сесията.