Postgresql
使用觸發器阻止特定模式的刪除表
我試圖阻止任何人刪除特定模式“公共”上的表,除非使用者是一個
rds_superuser
但我編寫的函式正在保護所有模式。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; $$;
我怎樣才能讓它工作?
TG_TABLE_SCHEMA
未在事件觸發器中設置。您必須呼叫
pg_event_trigger_dropped_objects()
以獲取有關丟棄對象的資訊。結果列中有schema_name
,其中包含受影響對象的模式名稱。