在postgresql中选择内置函数和用户定义函数之间的区别

时间:2018-02-10 21:24:37

标签: postgresql syntax

我试图理解postgresql在从内置的标量值函数中进行选择时的行为,例如: current_date和用户定义的那些,特别是在别名时。请看以下示例:

SELECT * FROM CURRENT_DATE AS x;
SELECT x FROM CURRENT_DATE AS x;
SELECT x.x FROM CURRENT_DATE AS x;

以上所有输出相同的东西,当前日期在名为“x”的列中。

现在定义以下功能:

CREATE OR REPLACE FUNCTION
    f (r OUT INTEGER)
AS $$
BEGIN
    r := 1;
END
$$ LANGUAGE plpgsql;

然后采取以下示例:

SELECT * FROM f() AS x;
SELECT x FROM f() AS x;
SELECT r FROM f() AS x;
SELECT x.r FROM f() AS x;
SELECT x.x FROM f() AS x;

第一个在名为“r”的列中输出值1。第二个输出名为“x”的列中的值。第三个和第四个输出名为“r”的列中的值,与第一个相同。第五个导致错误。

为什么current_date和f函数之间的行为不同?

1 个答案:

答案 0 :(得分:0)

不同之处在于您为输出参数指定了名称(r)。如果你不这样做,那么你的功能就像current_date一样。