PostgreSQL中的函数名称是否不区分大小写?

时间:2011-06-10 19:19:12

标签: postgresql

在PostgreSQL中定义或调用函数时,情况是否重要?

3 个答案:

答案 0 :(得分:13)

函数名称是标识符(如表名,字段名),相同的rules案例敏感性适用于所有人。

简而言之,标识符为case insensitive, unless quoted

更准确地说,不带引号的标识符在内部转换为小写,然后尝试进行大小写的匹配。 这可能会使您的生活变得悲惨(即隐藏的错误,浪费时间),通常是在定义表或函数时使用带引号的标识符。

这就是为什么你应该总是定义自己的naming convention并坚持下去。

一般建议:对标识符始终使用小写,并且要开心。

db=# select now();
              now
-------------------------------
 2011-06-10 16:33:06.588401-03
(1 row)

db=# select Now();
              now
-------------------------------
 2011-06-10 16:33:08.066818-03
(1 row)

db=# select "now"();
              now
-------------------------------
 2011-06-10 16:33:14.543381-03
(1 row)

db=# select "Now"();
ERROR:  function Now() does not exist
LINE 1: select "Now"();
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

答案 1 :(得分:1)

PostgreSQL中的标识符和关键字名称不区分大小写。函数名称是标识符。

答案 2 :(得分:1)

我想你可以对这个问题得到很多不同的答案。从技术上讲,PostgreSQL中的函数名称区分大小写。但是当您通过SQL处理函数时,标识符语法规则适用,即不带引号的标识符被折叠为小写。这可以给出不区分大小写的函数名称的错觉,但它只是SQL语言的特质。例如,将此对比为过程语言的名称,即使您对标识符进行双重引用也不区分大小写。