#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
инструкции.