前景:之前聽前輩們說過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"這種加雙引號的寫法總感覺怪怪的。