Postgresql

使用觸發器阻止特定模式的刪除表

  • December 20, 2019

我試圖阻止任何人刪除特定模式“公共”上的表,除非使用者是一個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,其中包含受影響對象的模式名稱。

引用自:https://dba.stackexchange.com/questions/255995