【发布时间】:2020-03-31 09:42:36
【问题描述】:
我在 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 触发的表呢?它是否存储在变量中?
【问题讨论】:
-
对于
CREATE TABLE和DROP TABLE,您可以保存您当前拥有的表列表,然后使用information_schema.tables比较添加或删除的值,以便您可以捕获表名。这对ALTER TABLE来说更难 -
@OtoShavadze 谢谢,您知道管理
ALTER TABLE的程序吗?
标签: sql postgresql eventtrigger postgresql-triggers