PostgreSQL的SQL語句中的雙引號引發的問題

最近開發一個WEB的ETL工具需要用到不同的數據源。第一次用POSTGRESQL發現一個雙引號引發的問題:

標準的SQL是不區分大小寫的。但是PostgreSQL對於數據庫中對象的名字允許使用支持大小寫區分的定義和引用方法。方式就是在DDL中用雙引號把希望支持大小的對象名括起來。
比如希望創建一個叫AAA的表。如果用CREATE TABLE AAA (...);的話,創建出來的表實際上是aaa。
如果希望創建大寫的AAA表的話,就需要用CREATE TABLE "AAA" (...);這種雙引號的方式定義對象名。
這樣寫的缺點是查詢語句必須也使用雙引號的方式引用對象名。比如SELECT * FROM "AAA";否則PostgreSQL缺省會去找aaa這個對象,然後返回aaa不存在的錯誤。需要注意的是不僅僅是表可以這樣定義和引用,對PostgreSQL中的任意對象(比如列名,索引名等)都有效。


實際上傳統的SQL都是不區分大小寫的,所以只要DDL和DLL按照傳統(不使用雙引號)的方式操作數據庫對象不會有任何問題。問題出在如果表是通過PostgreSQL的pgAdmin III 工具創建的話,缺省是按照有雙引號的方式創建對象的,所以DLL裏面必須也要按照有雙引號的方式使用。但是這種寫法不是標準的,如果是通過一些通用庫函數訪問數據庫的話,會不被支持。


建議:
1.不推薦使用pgAdmin III這個工具創建數據庫對象。還是應該手工編寫DDL語句。
2.不推薦在DDL裏用雙引號的方式創建區分大小寫的對象。
3.PostgreSQL給出的建議是SQL的key word用大寫,其他的名稱全部使用小寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章