Получить имя таблицы PostgreSQL Триггер события - PullRequest
1 голос
/ 31 марта 2020

У меня есть несколько таблиц в базе данных PostgreSQL 9.6, изменения которых я хочу отслеживать и обрабатывать во внешнем приложении.

Обработка только изменений данных не была сложной, но теперь я хочу отслеживать изменения структуры моей базы данных для хранения. Вот что у меня есть:

CREATE OR REPLACE FUNCTION log_structureChanged()
    RETURNS event_trigger AS $$
BEGIN
    UPDATE dbchanged SET changed=2 WHERE table_name = TG_ARGV[0];
    RETURN NEW;
END; 
$$ LANGUAGE PLPGSQL;


CREATE EVENT TRIGGER testData_struc
    ON ddl_command_end 
    WHEN TAG IN ( 'CREATE TABLE', 'ALTER TABLE', 'DROP TABLE' )
    EXECUTE PROCEDURE log_structureChanged();

Когда вызывается EXECUTE PROCEDURE, я хочу проанализировать таблицу, в которую были внесены изменения. Официальная документация PostgreSQL не очень помогла мне - я также, возможно, не полностью понял некоторые части.

Так как мне разобрать таблицу на которой стрелял EVENT TRIGGER? Хранится ли он внутри переменной?

1 Ответ

1 голос
/ 31 марта 2020

Как и , описанное в документации , вы можете вызвать функцию pg_event_trigger_ddl_commands(), которая будет возвращать одну строку для каждого затронутого объекта.

Вы можете использовать столбец результата object_identity, который содержит текстовое описание затронутого объекта или classid и objid, которые содержат идентификатор объекта таблицы каталога, содержащей объект, и идентификатор объекта затронутого объекта.

...