Estou tentando impedir que alguém solte tabelas em um esquema específico "público", a menos que o usuário seja um, rds_superuser
mas a função que escrevi está protegendo todos os esquemas.
CREATE OR REPLACE FUNCTION guard_tables()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF TG_TABLE_SCHEMA = 'public' AND (SELECT COUNT(*) FROM pg_roles WHERE pg_has_role(CURRENT_USER, oid, 'member') AND rolname = 'rds_superuser') = 0 THEN
RAISE EXCEPTION 'command % is disabled for this table', tg_tag;
END IF;
END;
$$;
Como faço para que isso funcione?
TG_TABLE_SCHEMA
não está definido em acionadores de eventos.Você terá que ligar
pg_event_trigger_dropped_objects()
para obter informações sobre os objetos descartados. Entre as colunas de resultados estáschema_name
, que contém o nome do esquema do objeto afetado.