Postgres:为什么一些函数调用require()而其他函数不调用?

时间:2016-08-01 16:40:32

标签: sql postgresql function

我的问题是: 为什么有些postgresql函数需要空括号而其他函数则不需要,如何判断正确的语法?

实施例: 这不起作用

select pg_postmaster_start_time;

结果

ERROR:  column "pg_postmaster_start_time" does not exist
LINE 1: select pg_postmaster_start_time;
           ^

然而这有效:

select pg_postmaster_start_time();

导致

   pg_postmaster_start_time
-------------------------------
 2016-08-01 16:07:12.728306+01
(1 row)

现在对于相反的情况:这是有效的

select current_user;

,结果是

 current_user
--------------
 edbstore
(1 row)

但这不起作用

select current_user();

导致

ERROR:  syntax error at or near "("
LINE 1: select current_user();
                       ^

我确实发现这已被问到here,但似乎没有答案

1 个答案:

答案 0 :(得分:2)

阅读docs - 它说

  

注意:current_catalog,current_schema,current_user,session_user和   用户在SQL中具有特殊的语法状态:必须在没有的情况下调用它们   尾随括号。 (在PostgreSQL中,括号可以选择   与current_schema一起使用,但不与其他人一起使用。)

我知道这听起来像"因为它是这么说的,所以实际上并没有回答你的问题。但这就是文档解释它的方式。