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"這種加雙引號的寫法總感覺怪怪的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM