Я бы сделал таблицу безопасной, добавив составной первичный ключ (который вы уже сделали):
ALTER TABLE table ADD CONSTRAINT pk_table PRIMARY KEY (timestamp, person, type);
Кроме того, я бы сделал материализованный вид безопасным, добавив туда и первичный ключ. В зависимости от того, как построен mv, вам нужно изменить запрос, который его передает, чтобы не было дубликатов. Например, здесь .
Если оба безопасны, вставка проста:
INSERT INTO table (timestamp, person, type, further_col1, col2, ...)
SELECT timestamp, name, type, further_col1, col2, ....
FROM edb.mv_1 m
WHERE NOT EXISTS (
SELECT *
FROM table t2
WHERE t2.timestamp = m.timestamp
AND t2.person = m.name
AND t2.type = m.type
);
Если у вас есть только три столбца, вы можете сократить вставку до:
INSERT INTO table (timestamp, person, type)
SELECT timestamp, name , type FROM edb.mv_1
MINUS
SELECT timestamp, person, type FROM table;
Пожалуйста, убедитесь, что столбцы НЕ являются НЕДЕЙСТВИТЕЛЬНЫМИ в таблице и mv. И, пожалуйста, не называйте таблицы table
и столбцы timestamp
или type
. Я уверен, что это только примеры.