PostgreSQL大小写的坑

前景:之前听前辈们说过postgresql大小写敏感,觉得自己注意应该也不是啥事。今天用postgresql写存储过程,以前的命名习惯,喜欢全大写,然后调用的存储过程名写的大写也提示找不到,然后开始试验了下表名、字段、函数等名大写或驼峰命名,发现postgresql的大小写规则可以用“混乱”形容。当然“混乱”不是指postgresql没定义清楚,是指我这程序员的思维理解起来不那么舒服。

Part1:试验了各种大小写以及调用后的现象

1)建立了大写的表NODE,查询不论是用NODE还是node都不行,需用"NODE"才可识别。

  正确语句:

SELECT * from  "NODE" ;

2)建立了小写的表edge,查询不论是用EDGE还是edge都可以(额,说好的大小写敏感呢),"edge"也可识别。

       正确语句:

SELECT * from edge ;或 EDGE 或"edge"

3)存储过程测试结论与表名一样。

      大写的存储过程TP_INSERT需用call "TP_INSERT"();来调用。

       小写的存储过程tp_select,可用call  tp_select(); 或 call TP_SELECT();或call  "tp_select"(); 来调用

4)在NODE表中建立字符型name,Name,NAME三个字段(居然能建成功),对应插入值'lili','Lili','LILI'。

 INSERT INTO public."NODE"(name, "Name", "NAME")  VALUES ('lili','Lili', 'LILI');   //插入成功

 SELECT  name,"Name","NAME" from "NODE"; //查询正确返回值

      小写表的测试结果与上述结果相同。

Part2:结论

       1)PostgreSQL对建立的对象(存储过程、函数、表、字段、序列等)名称的大小写敏感;

       2)SQL语句中大小写不敏感,大写和小写的sql语句意义一致,所有大写的均转换为小写来解释,如select * from NODE和select * from node是完全一致的;

       3)如要查询或调用大写的PostgreSQL对象,需在对应的名称上加双引号,如"NODE";

       4)最后的建议就是PostgreSQL中能用小写的就小写,毕竟"NODE"这种加双引号的写法总感觉怪怪的。

作者: GoodGF
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/gaofan/p/11398753.html