如何在PostgreSQL中创建临时函数?
我必须在数据库中执行一个循环。这只是一次性的要求。 在执行了这个函数之后,我现在正在删除这个函数如何在PostgreSQL中创建临时函数?,sql,postgresql,sql-function,Sql,Postgresql,Sql Function,我必须在数据库中执行一个循环。这只是一次性的要求。 在执行了这个函数之后,我现在正在删除这个函数 创建临时/一次性函数有什么好方法吗?如果您使用的是9.0版,您可以使用新的do语句来实现这一点: 对于以前的版本,您需要创建函数,调用它,然后再次删除它。对于ad hock过程,这并不太糟糕。然而,它们的生产效率太低,无法使用 它们可以让您轻松地在数据库中循环sql结果。我需要知道如何在我编写的脚本中多次使用。事实证明,您可以使用pg_temp模式创建一个临时函数。这是一个根据需要为您的连接创建的
创建临时/一次性函数有什么好方法吗?如果您使用的是9.0版,您可以使用新的do语句来实现这一点: 对于以前的版本,您需要创建函数,调用它,然后再次删除它。对于ad hock过程,这并不太糟糕。然而,它们的生产效率太低,无法使用
它们可以让您轻松地在数据库中循环sql结果。我需要知道如何在我编写的脚本中多次使用。事实证明,您可以使用pg_temp模式创建一个临时函数。这是一个根据需要为您的连接创建的模式,是存储临时表的地方。当您的连接关闭或过期时,此架构将被删除。事实证明,如果在此架构上创建函数,则会自动创建该架构。所以,
create function pg_temp.testfunc() returns text as
$$ select 'hello'::text $$ language sql;
将是一个功能,只要您的连接保持不变,它就会保持不变。无需调用drop命令。对以下内容添加几条注释:
- 即使
位于pg_temp
(与默认情况相同),该函数必须始终符合架构要求,以防止特洛伊木马:search_路径
如果你只需要重复执行一个函数,所有你需要的是SQL,那么就考虑一个。它的行为非常类似于在会话结束时终止的临时SQL函数。但是,这不一样,只能与
EXECUTE
一起使用,不能嵌套在另一个查询中。例如:
PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;
电话:
详情:
pg_temp.foo()
。我不明白为什么(!?)在2014年的今天,语言无法提供如此简单和快速的示例(!)。而且,DO
语句不能有输入参数,也不能返回结果,这与函数相反。如果它不返回,我们应该称它为“函数”吗?
CREATE INDEX foo_idx ON tbl (pg_temp.f_inc(id));
PREPARE upd_tbl AS
UPDATE tbl t SET set_name = $2 WHERE tbl_id = $1;
EXECUTE upd_tbl(123, 'foo_name');