1
是否可以創建在會話結束時自動刪除的觸發器或函數?或者說「當我斷開連接時運行這個SQL」?在PostgreSQL的會話結束時刪除觸發器/函數?
是否可以創建在會話結束時自動刪除的觸發器或函數?或者說「當我斷開連接時運行這個SQL」?在PostgreSQL的會話結束時刪除觸發器/函數?
在近來的Postgres的版本,你可以在pg_temp
模式創建一個函數:
create function pg_temp.get_true() returns boolean language sql as $$ select true; $$;
select pg_temp.get_true();
這是在其中創建臨時表的模式。其所有內容,包括您的功能,將在會話結束時被刪除。
您還可以在表上使用臨時函數創建觸發器。我剛剛測試了這一點,它按預期工作:
create function pg_temp.ignore_writes() returns trigger language plpgsql as $$
begin
return NULL;
end;
$$;
create table test (id int);
create trigger test_ignore_writes
before insert, update, delete on test
for each row execute procedure pg_temp.ignore_writes();
因爲這個觸發函數總是返回NULL
是before [event]
它應該做的任何寫入此表被忽略。事實上:
insert into test values(1);
select count(*) from test;
count
-------
0
但註銷後,登錄本功能,並觸發將不存在了,所以寫會工作:
insert into test values(1);
select count(*) from test;
count
-------
1
但是你應該知道,這是有點hackish的 - 不經常使用,可能不會被徹底測試。
我不這麼認爲。有觸發到數據庫級別,但與其他事件:http://www.postgresql.org/docs/9.3/static/event-trigger-matrix.html你可以描述你的情況?你爲什麼需要這個? –
@ user_0這是可能的 - 請參閱我的答案 – Tometzky