Триггер: перемещать удаленные ряды на архивную таблицу
-
16-10-2019 - |
Вопрос
У меня есть небольшая таблица (~ 10 рядов) под названием restrictions
В моей базе данных PostgreSQL, где значения удаляются и вставляются ежедневно.
Я хотел бы иметь стол под названием restrictions_deleted
, где каждый ряд удаляется из restrictions
будет храниться автоматически. С restrictions
Имеет серийный идентификатор, не будет дубликатов.
Как мне написать такой триггер в PostgreSQL?
Решение
Вам просто нужно переместить старые данные в restrictions_deleted
стол до того, как он будет удален. Это делается с OLD
тип данных. Вы можете использовать регулят INSERT
утверждение и и используйте OLD
Значения как будущие значения.
CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();
CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
BEGIN
INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
Другие советы
Если вы открыты для другого подхода, рассматривали ли вы добавление «удаленного» логического флага в таблицу или вместо этого «удаленная» время.
Или, что еще лучше, отрицайте доступ к вашим таблицам базы данных и обрабатывайте след аудита в вашем транзакционном API :)