Триггер: перемещать удаленные ряды на архивную таблицу

dba.stackexchange https://dba.stackexchange.com/questions/2531

Вопрос

У меня есть небольшая таблица (~ 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 :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top