获取 Table PostgreSQL 事件触发器的名称

Get Table Name of PostgreSQL Event Trigger

我在 PostgreSQL 9.6 数据库中有多个 table,我想在外部应用程序中监视和处理这些更改。

仅处理数据更改并不难,但现在我想监视要存储的数据库的结构更改。这是我的:

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 时,我想解析已进行更改的 table。官方 PostgreSQL 文档并没有真正帮助我 - 我也可能没有完全理解某些部分。

那么我如何解析 EVENT TRIGGER 触发的 table?它存储在变量中吗?

作为 described in the documentation,您可以调用函数 pg_event_trigger_ddl_commands(),这将为每个受影响的对象 return 一行。

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