事件触发器能捕获到表空间对象上的 DDL 事件吗?
事件触发器对一个特定数据库来说是全局的,并且可以捕获该数据库中发生的 DDL 事件。在 Redrock Postgres 中,表空间是数据库级别的对象,事件触发器可以捕获到表空间对象上的 DDL 事件,详情可参见 事件触发器触发矩阵。
在下面的例子中,我们创建了一个事件触发器,在命令结束处捕获该数据库中发生的 DDL 事件。
CREATE OR REPLACE FUNCTION ddl_trigger_func()
RETURNS event_trigger AS $$
DECLARE
ddl record;
BEGIN
FOR ddl IN SELECT * FROM pg_event_trigger_ddl_commands()
LOOP
RAISE NOTICE 'ddl command: %',
pg_ddl_command_deparse(ddl.command);
END LOOP;
END $$ LANGUAGE plpgsql;
CREATE EVENT TRIGGER ddl_event_trigger
ON ddl_command_end
EXECUTE PROCEDURE ddl_trigger_func();
让我们来创建、更改和删除一个表空间dbspace
。
CREATE TABLESPACE dbspace LOCATION '/data/dbs';
ALTER TABLESPACE dbspace OWNER TO david;
DROP TABLESPACE dbspace;
在上面的例子中,我们会发现,在创建、更改和删除表空间dbspace
时,事件触发器捕获到了对应的 DDL 事件。