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