Импорт данных
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 дисквалифицирует уже существующие названия. NOT EXISTS было бы другой возможностью.
DISTINCT предотвращает дублирование входящих данных во временной таблице tmp.
ANALYZE помогает убедиться, что планировщик запросов выбирает разумный план. , а временные таблицы автоочисткой не анализируются.
Поскольку у вас есть 3 миллиона элементов, возможно, стоит повысить значение параметра temp_buffer (только для этого сеанса):
SET temp_buffers = 1000MB;
Или столько, сколько вы можете себе позволить и достаточно, чтобы держать временную таблицу в оперативной памяти, что намного быстрее. Примечание: это должно быть выполнено сначала в сеансе — до того, как будут созданы какие-либо временные объекты.
Получить идентификаторы
Чтобы просмотреть все идентификаторы импортированных данных:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
В том же сеансе! Временная таблица удаляется автоматически в конце сеанса.
person
Erwin Brandstetter
schedule
05.04.2013