有“临时功能”这样的东西吗?

时间:2015-03-18 14:35:50

标签: postgresql function

有临时视图和临时表 - 是否有"临时功能"?我有一个我想在事务中使用的函数,然后丢弃(类似用例到临时表)。另外我想要两个并发事务能够创建同一个函数没有锁争用的同名。

1 个答案:

答案 0 :(得分:4)

现有CREATE TEMP FUNCTION ...没有CREATE TEMP TABLE ...。但是有一个技巧是在临时模式pg_temp中创建一个函数,就像linked answer provides一样。该功能仅在同一会话中可见,并且只能由模式限定名称调用:

CREATE FUNCTION pg_temp.f_inc(int)
  RETURNS int AS 'SELECT $1 + 1' LANGUAGE sql IMMUTABLE;

SELECT pg_temp.f_inc(42);
f_inc
-----
43

我可以将这个想法追溯到this post by Tom Lane on pgsql-general

没有技巧的最接近的事情是准备好的声明。与在会话结束时死亡的临时SQL函数非常相似。但是,不是相同的事物,并且只能单独使用,而不能在更大的查询的上下文中使用。例如:

PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;

呼叫:

EXECUTE upd_tbl(123, 'foo_name');

详细说明: