要添加到對方的回答,Postresql的有關標識符(表名和列名)的情況下,sentivity的行爲是:
- 如果該名稱沒有加引號,將它轉換爲小寫 。否則,它保持不變。
- 之後,嘗試了區分大小寫匹配。
這不僅適用於查詢,也適用於模式操作;特別是:創建表格。
The golden rule is consistency:
If you want to write portable applications you are advised to always quote a particular name or never quote it
張貼的問題出現,很可能是因爲表和列名字被創建時引用(因此,他們並沒有轉換爲小寫)。所以,現在他們必須在所有查詢中引用(並區分大小寫)。
通常情況下,所有工作都按預期工作。
db=# create table Xxx (id integer); -- unquoted, will be converted to lowercase
CREATE TABLE
db=# select * from xXx; -- this works ok
id
----
(0 rows)
db=# create table "Xxxx" (id integer); -- will be left untouched
CREATE TABLE
db=# select * from xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from xxxx;
db=# select * from Xxxx; -- bad
ERROR: relation "xxxx" does not exist
LINE 1: select * from Xxxx;
^
db=# select * from "Xxxx"; -- ok
id
----
(0 rows)
db=# \dt *xx*
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | Xxxx | table | postgres
public | xxx | table | postgres
Huzzah!所以「執行('SELECT * FROM'Books'')是有效的。因爲我也大寫了我的列名,我必須使用」execute('SELECT'Title'FROM'Books'')。 它是在PostgreSQL數據庫中始終使用小寫表和字段名稱的「標準」還是可接受的方法? – 2010-05-05 15:37:01
以小寫形式書寫所有標識符(並用下劃線分隔單詞)是一種慣例,主要是爲了方便。關於解析器所謂的「case-folding」 - SQL標準規定了這種行爲(有一點不同 - 當不加引號時,標識符被摺疊爲大寫)。 – 2010-05-05 17:56:33
引用標識符是MSSQL開發者似乎喜歡的東西。但大多數其他數據庫開發人員往往不這樣做。如果您在創建表格,視圖和函數時未引用標識符,則不必擔心以後引用它們。如果你不引用,Postgres會摺疊到小寫,而Oracle會做大寫。 – 2010-05-05 18:20:52