前景:之前听前辈们说过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语句意义一致,如select * from NODE和select * from node是完全一致的;
3)如要查询或调用大写的PostgreSQL对象,需在对应的名称上加双引号,如"NODE";
4)最后的建议就是PostgreSQL中能用小写的就小写,毕竟"NODE"这种加双引号的写法总感觉怪怪的。