====== 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();