PostgreSQL:匿名DO块的void retun类型

时间:2019-07-09 23:43:58

标签: postgresql internals postgresql-11

PostgreSQL的匿名DO块在https://www.postgresql.org/docs/current/sql-do.html处有详细说明。

这清楚地表明 将代码块视为没有参数的函数的主体,返回void 。它会被解析并执行一次。

我想知道是否有一种方法可以执行没有参数但动态返回类型的 DO块

以下示例将说明我的要求。我想表明我对 plpgsql 的使用只是一个例子!可以是PostgreSQL环境中的任何LANGUAGE

DO $$
BEGIN
    Return SELECT table_schema, table_name FROM information_schema.tables
             WHERE table_type = 'VIEW' AND table_schema = 'public'
END$$ LANGUAGE plpgsql;

ERROR: RETURN cannot have a parameter in function returning void

在任何人跑到答案部分并解释我要矛盾之前,我想继续以下内容。 PostgreSQL提供了CREATE LANGUAGE功能https://www.postgresql.org/docs/current/sql-createlanguage.html。 如果我们查看inline参数,它将说:

  

INLINE inline_handler

     

inline_handler是先前注册的函数的名称,该函数   在此将被调用以执行匿名代码块(DO命令)   语言。如果未指定inline_handler函数,则语言   不支持匿名代码块。处理函数必须   类型为internal的一个参数,它将是DO命令的内部参数   表示形式,它将通常返回void。   处理程序将被忽略。

     

通常返回void

通常返回void 是否表示在某种情况下可以使用DO块返回void以外的内容?

如果有一种方法可以实现匿名代码执行,但没有DO块,并且具有自定义返回类型,那么我会很感兴趣。

请注意问题的内部标记:这是关于事情运作方式的问题。

1 个答案:

答案 0 :(得分:0)

您无法从DO返回结果。

最接近的等效方法是在pg_temp模式中创建一个函数,该函数随后是一个临时函数,并在数据库会话结束时自动删除。