• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Asp.net web Api源码分析HttpServer的创建
    asp.net mvc源码分析DefaultModelBinder 集合绑定
    asp.net mvc RouteCollection的RouteExistingFiles属性理解
    Asp.net web Api源码分析HttpResponseMessage
    asp.net mvc源码分析RenderAction和RenderPartial
    AcWing 1022. 宠物小精灵之收服
    AcWing 423. 采药
    AcWing 272. 最长公共上升子序列
    算法浅谈之迭代加深
    AcWing 1023. 买书
  • 原文地址:https://www.cnblogs.com/gaofan/p/11398753.html
Copyright © 2020-2023  润新知