У меня есть таблица PostgreSQL, в которой проиндексированы некоторые поля, и они должны быть уникальными, чтобы предотвратить дублирование. Это делается благодаря функции PLPGSQL, которая вставляет все поля и перехватывает уникальное исключение нарушения _, хотя прекращает вставлять записи, даже если есть только один дубликат.
Я не могу сделать несколько INSERT из-за проблем с производительностью (некоторые из них выполняются сотнями ), проблема в том, что он останавливает весь процесс, даже если есть только один дубликат, как в первых двух значениях в следующем пример.
CREATE OR REPLACE FUNCTION easy_import() RETURNS VOID AS
$$
BEGIN
BEGIN
INSERT INTO things ("title", "uniq1", "uniq2") VALUES
('title 1', 100, 102),
('title 2', 100, 102),
('title 3', 101, 102),
('title 4', 102, 102),
('title 5', 103, 102),
('title 6', 104, 102),
('title 7', 105, 102),
('title 8', 106, 102),
('title 9', 107, 102),
('title 10', 108, 102);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing
END;
END;
$$
LANGUAGE plpgsql;
Есть ли способ игнорировать уникальное нарушение _только для одной записи и предотвратить остановку дальнейших INSERT?
Спасибо.
JOIN
не просто так. Все еще работаю над этим.