zoukankan      html  css  js  c++  java
  • 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【UNR#3】白鸽
    【POI2011】Garbage
    【NOI2010】海拔
    【HNOI2012】矿场搭建
    【UOJ#177】欧拉回路
    【BZOJ4500】矩阵
    【CF429E】Points and Segments
    【agc001F】Wide Swap
    【BZOJ2138】stone
    【JSOI2009】游戏
  • 原文地址:https://www.cnblogs.com/gaofan/p/11398753.html
Copyright © 2011-2022 走看看