我正在尝试创建一个PostgreSQL事件触发器,每当用户创建任何东西(表、视图、函数、序列...)并将这个新创建的东西的所有者设置为特定角色时,该触发器就会触发。
到目前为止,我已经有了事件触发器本身,它可以在任何CREATE命令上触发:
CREATE EVENT TRIGGER setOwnerToMyRole ON ddl_command_end
WHEN tg_tag LIKE 'CREATE%'
EXECUTE PROCEDURE setOwnerToMyRole();
但是我遇到了函数本身的问题:
CREATE FUNCTION setOwnerToMyRole() RETURNS event_trigger LANGUAGE plpgsql
AS $$ BEGIN
ALTER <type> <name> OWNER TO myRole
END; $$;
我该如何获取新创建的对象的类型(例如表格、视图等),以及它的名称?
编辑: 查看这个问题和这个问题以及当然的CREATE EVENT TRIGGER和Trigger Procedures,目前这是不太可能的:(
CREATE
事件的存在也可以触发查询pg_tables
,以查找任何不属于目标角色的对象,然后使用ALTER TABLE <new_table> OWNER TO my_role
进行更新。你试过类似这样的方法吗? - Richard D