在 CREATE 上更改所有者的事件触发器

Event trigger to change owner on CREATE

我正在尝试创建一个 PostgreSQL 事件触发器,每当用户创建任何东西(table、视图、函数、序列...)并将这个新创建的东西的所有者设置为一定的作用。

到目前为止,我有 even 触发器本身,它会在任何 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; $$;

如何获取类型(如 table、视图等)以及如何获取新建对象的名称?


编辑: 看看this question and this question and of course CREATE EVENT TRIGGER and Trigger Procedures,这目前是不可能的:(

猜猜,我应该正确回答这个问题,而不仅仅是在编辑中: 我想要的目前是不可能的。也许未来对 Postgres 的更新会为事件触发器添加更多功能。

来源:

这对我来说效果很好,尽管它比需要的要宽一些。它基于 https://blog.hagander.net/setting-owner-at-create-table-237/

处的代码
CREATE OR REPLACE FUNCTION trg_create_set_owner()
 RETURNS event_trigger
 LANGUAGE plpgsql
AS $$
DECLARE
  obj record;
BEGIN
  -- postgresql 9.5 or later:
  -- FOR obj in SELECT table_name FROM pg_event_trigger_ddl_commands() WHERE command_tag='CREATE TABLE'
  FOR obj IN SELECT tablename FROM pg_tables WHERE tableowner = current_user LOOP
    EXECUTE format('ALTER TABLE %s OWNER TO my_group', obj.tablename);
  END LOOP;
END;
$$;

CREATE EVENT TRIGGER trg_create_set_owner
 ON ddl_command_end
 WHEN tag IN ('CREATE TABLE', 'CREATE TABLE AS')
 EXECUTE PROCEDURE trg_create_set_owner();