0
您好我想創建一個在像pg_catalog創建一個表函數:postgresql:如何用函數修改pg_catalog?
CREATE OR REPLACE FUNCTION foo() RETURNS void AS $$
DECLARE
BEGIN
EXECUTE 'CREATE TABLE pg_catalog.tab(a integer)';
RETURN;
END;
$$ LANGUAGE plpgsql;
錯誤:拒絕打造「pg_catalog.tab」權限
詳細信息:系統目錄修改目前禁止。
編輯我的問題,爲增加更多的細節:
房地產我想創建一個表時被丟棄的啓動功能。我認爲唯一的辦法就是創建表pg_catalog.tables觸發器:
CREATE OR REPLACE FUNCTION a() RETURNS void AS $$
DECLARE
BEGIN
EXECUTE 'CREATE TRIGGER "tt_drop" BEFORE DELETE ON pg_catalog.pg_tables EXECUTE PROCEDURE public.b()';
RETURN;
END;
$$ LANGUAGE plpgsql;
,在b我想要做刪除表的一些操作也被刪除之前的功能...
感謝很有意思,但我需要刪除的表的名稱,現在不支持TG_OBJECTNAME!將來我會修改我的函數usign事件觸發器。現在我發現allow_system_table_mods = on可以添加到postgres.conf中,但是您如何告訴我這不是一種正確的模式:-(如果我只在創建觸發器後激活該觸發器並使其失效,那麼觸發器的工作原理是什麼? –
@ user3297525 :刪除的表名是已知的 - 查看更新的回覆 –
確定但是刪除的表不能移動到另一個模式(alter table t set schema s),因爲表t對於postgres現在不存在。 drop操作? –