获取 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
,其中包含受影响对象的文本描述,或者使用 classid
和 objid
,其中包含目录 table,其中包含受影响对象的对象和对象 ID。
我在 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
,其中包含受影响对象的文本描述,或者使用 classid
和 objid
,其中包含目录 table,其中包含受影响对象的对象和对象 ID。