Зміст

Event trigger

В PostgreSQL є два типи трігерів: звичайні та event trigger. Останні живуть на рівні бази даних і можуть бути призначені на подію створення таблиці серед іншого. Далі буде тригер, який для будь-якої новоствореної таблиці змінює owner на визначеного.

Змінити поточного користувача на суперюзера

SET ROLE rds_superuser;

Створити функцію-обробник

CREATE OR REPLACE FUNCTION auto_owner() 
	RETURNS event_trigger
	LANGUAGE plpgsql AS 
$$
-- Function used in trigger on new table creation. Updates table owner
DECLARE
	new_owner CONSTANT varchar := 'admin_staging';
	obj record;
BEGIN
	FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag in ('CREATE TABLE','CREATE TABLE AS')
	LOOP
		EXECUTE format('ALTER TABLE %s OWNER TO %s', obj.object_identity, new_owner);
	END LOOP;
END;
$$;

Створити тригер

CREATE EVENT TRIGGER auto_update_table_owner 
	ON ddl_command_end
	WHEN tag IN ('CREATE TABLE', 'CREATE TABLE AS')
	EXECUTE FUNCTION auto_owner();