2

我在 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触发的表呢?它是否存储在变量中?

4

1 回答 1

2

文档中所述,您可以调用该函数pg_event_trigger_ddl_commands(),该函数将为每个受影响的对象返回一行。

您可以使用object_identity包含受影响对象的文本描述的结果列,或者使用classidand objid,其中包含包含对象的目录表的对象 ID 和受影响对象的对象 ID。

于 2020-03-31T11:40:22.320 回答