是否可以创建在会话结束时自动删除的触发器或函数?或者说"当我断开"?
时运行这个SQL答案 0 :(得分:3)
在最近的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
但是你应该知道这有点过时 - 不经常使用,也可能没有经过彻底的测试。