Как я могу использовать Триггеры Пост-ГРЭС для хранения изменений

"Проверка" дерева двоичного поиска означает, что Вы проверяете, что она действительно имеет все меньшие объекты на левых и больших объектах справа. По существу это - проверка, чтобы видеть, является ли двоичное дерево двоичным файлом поиск дерево.

16
задан MichielB 18 September 2016 в 12:06
поделиться

4 ответа

пример триггера аудита из https://www.postgresql.org/docs/current/static/plpgsql-trigger.html

CREATE TABLE emp (
    empname           text NOT NULL,
    salary            integer
);

CREATE TABLE emp_audit(
    operation         char(1)   NOT NULL,
    stamp             timestamp NOT NULL,
    userid            text      NOT NULL,
    empname           text      NOT NULL,
    salary integer
);

CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
    BEGIN
        --
        -- Create a row in emp_audit to reflect the operation performed on emp,
        -- make use of the special variable TG_OP to work out the operation.
        --
        IF (TG_OP = 'DELETE') THEN
            INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
            RETURN NEW;
        END IF;
        RETURN NULL; -- result is ignored since this is an AFTER trigger
    END;
$emp_audit$ LANGUAGE plpgsql;

CREATE TRIGGER emp_audit
AFTER INSERT OR UPDATE OR DELETE ON emp
    FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
32
ответ дан 30 November 2019 в 15:47
поделиться

Действительно ли вам нужен журнал аудита запросов, хранящихся в таблице? Самый простой способ получить файл со всеми выполненными запросами - использовать встроенное ведение журнала postgresql.

В вашем postgresql.conf (обычно в каталоге $ PG_DATA) соответствующим образом установите следующие параметры:

log_directory '/path/to/log/dir'
log_filename = 'filename.log'
log_statement = 'mod'

Эта последняя опция позволяет регистрировать все операторы INSERT, UPDATE, DELETE, TRUNCATE и COPY FROM.

Более подробная информация в документации Postgres: http://www.postgresql.org/docs/current/static/ runtime-config-logging.html

10
ответ дан 30 November 2019 в 15:47
поделиться

Ссылка ниже должна указать вам правильное направление.

http://developer.postgresql.org/pgdocs/postgres/sql-createtrigger.html

В зависимости от того, что вы хотите сделать , возможно, лучше включить ведение журнала.

4
ответ дан 30 November 2019 в 15:47
поделиться

Журнал таблиц PostgreSQL от Андреаса Шербаума - это расширение Postgresql, которое использует триггер для записи любых операций INSERT, UPDATE и DELETE из определенной таблицы в другую таблицу.

Использовать просто: вы создаете вторую таблицу, которая имеет тот же формат, что и ваша таблица, за которой вы хотите следить. Кроме того, вам понадобятся дополнительные столбцы для сохранения регистрируемых данных.

Вторая часть журнала таблиц может восстанавливать состояние исходной таблицы или определенной строки в любое время в прошлом.

Сам не пробовал, но вроде работает.

Также есть слайды из разговора о журнале таблиц, но я не могу разместить здесь правильную ссылку из-за некоторой странности антиспама с переполнением стека :) (http: // andreas.scherbaum.la/writings/tablelog.pdf).

http://pgfoundry.org/projects/tablelog/

http: // andreas.scherbaum.la/blog/archives/100-Log-Table-Changes-in-PostgreSQL-with-tablelog.html

2
ответ дан 30 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: