Лично я установил «правило», прикрепленное к инструкции insert. Скажем, у вас была таблица «dns», в которой каждый раз записывались удары DNS для каждого клиента:
CREATE TABLE dns (
"time" timestamp without time zone NOT NULL,
customer_id integer NOT NULL,
hits integer
);
Вы хотели иметь возможность повторно вставлять строки с обновленными значениями или создавать их, если они не было уже. Ключ к customer_id и времени. Что-то вроде этого:
CREATE RULE replace_dns AS
ON INSERT TO dns
WHERE (EXISTS (SELECT 1 FROM dns WHERE ((dns."time" = new."time")
AND (dns.customer_id = new.customer_id))))
DO INSTEAD UPDATE dns
SET hits = new.hits
WHERE ((dns."time" = new."time") AND (dns.customer_id = new.customer_id));
Обновление: это может потерпеть неудачу, если происходят одновременные вставки, поскольку он будет генерировать уникальные исключения исключения. Однако транзакция без прерывания будет продолжаться и преуспеть, и вам просто нужно будет повторить завершенную транзакцию.
Однако, если есть много вложений, которые все время происходят, вам нужно будет заблокировать стол вокруг операторов вставки: Блокировка SHARE ROW EXCLUSIVE предотвратит любые операции, которые могут вставлять, удалять или обновлять строки в целевой таблице. Тем не менее, обновления, которые не обновляют уникальный ключ, безопасны, поэтому, если вы не выполните никаких действий, используйте вместо этого контрольные блокировки.
Кроме того, команда COPY не использует ПРАВИЛА, поэтому, если вы вставляете с COPY, вам нужно будет использовать триггеры.
На значение столбца ссылаются хэши, например, #STUDENT_ID#
.
Посмотрите, что написал Джеки Макилрой: « Удалить строку отчета с помощью динамического действия » ( https://jackiemcilroy.blogspot.com/2018/03/delete- row-of-report-with-dynamic-action.html ). Она описывает процесс подробно, с большим количеством скриншотов. Надеюсь, это поможет вам сделать то, что вы делаете.
На вашем месте я бы сделал одно из следующих действий:
Я не думаю, что удаляю строки из интерактивного отчета (но хорошо, это только я, и мои идеи обычно не слишком умны). [1111 ]