PostgreSQL: как автоматически установить владельца таблицы при создании новой таблицы

#postgresql

#postgresql

Вопрос:

В PostgreSQL владельцем таблицы автоматически устанавливается пользователь, создавший таблицу при создании новой таблицы. В этой ситуации другие пользователи не смогут удалить таблицу.

Поэтому я хочу автоматически изменить владельца таблицы для вновь созданных таблиц на определенную роль. Используя этот подход, любой, у кого есть эта роль, может удалить таблицы, владельцем таблицы которых является та же роль.

Для достижения этой цели я использовал тот же подход, что и описанный в этом блоге. https://blog.hagander.net/setting-owner-at-create-table-237 /

В настоящее время я использую эту функцию. Эта функция должна запускаться при создании новой таблицы в схеме analytics_custom и смене владельца таблицы на analytics_custom_readwrite . Но, похоже, функции работают не так, как ожидалось. Владельцем таблицы вновь созданной таблицы является пользователь, создавший таблицу.

Я что-то упускаю из виду? Есть какие-нибудь проблемы с этой функцией?

 CREATE OR REPLACE FUNCTION analytics_custom.trg_create_set_owner()
 RETURNS event_trigger
 LANGUAGE plpgsql
AS $function$
DECLARE
    obj record;
BEGIN
    FOR obj IN
        SELECT *
        FROM pg_event_trigger_ddl_commands()
        WHERE schema_name='analytics_custom' AND command_tag='CREATE TABLE'
    LOOP
        if obj.object_identity ~ 'analytics_custom.*'
        THEN
            EXECUTE format('ALTER TABLE %s OWNER TO analytics_custom_readwrite', obj.object_identity);
        end if;
    END LOOP;
END;
$function$
;
CREATE EVENT TRIGGER analytics_custom_trg_create_set_owner
    ON ddl_command_end
    WHEN tag IN ('CREATE TABLE')
    EXECUTE PROCEDURE analytics_custom.trg_create_set_owner();
 

Комментарии:

1. Вам не хватает CREATE EVENT TRIGGER инструкции.