2013-03-06 40 views
13

這是我目前的狀態。爲什麼psql無法找到現有表的關係名稱?

Eonil=# \d+ 
         List of relations 
Schema | Name | Type | Owner | Size | Description 
--------+------------+-------+-------+------------+------------- 
public | TestTable1 | table | Eonil | 8192 bytes | 
(1 row) 

Eonil=# \d+ TestTable1 
Did not find any relation named "TestTable1". 
Eonil=# 

問題是怎麼回事,怎樣才能看到表格定義?

回答

20

Postgres psql需要轉義爲大寫字母。

Eonil=# \d+ "TestTable1" 

所以這個效果很好。

Eonil=# \d+ "TestTable1" 
        Table "public.TestTable1" 
Column |  Type  | Modifiers | Storage | Description 
--------+------------------+-----------+----------+------------- 
ID  | bigint   | not null | plain | 
name | text    |   | extended | 
price | double precision |   | plain | 
Indexes: 
    "TestTable1_pkey" PRIMARY KEY, btree ("ID") 
    "TestTable1_name_key" UNIQUE CONSTRAINT, btree (name) 
Has OIDs: no 

Eonil=# 
+5

未加引號的標識符(如表名和列名)在PostgreSQL中被摺疊爲小寫字母,請注意標準指定它們應該被提升,所以PostgreSQL在這裏是非標準的。如果你需要你的標識符在特定的情況下,或者如果他們包含空格,那麼你**必須在任何地方**雙引號**。推薦的做法是使用小寫字母標識符和PostgreSQL中由下劃線分隔的單詞,這樣您就不必關心引用或案例問題。 – 2013-03-06 03:07:15

+0

感謝您的解釋。無論如何,作爲一名應用程序員 - 不是專業的DBA--我喜歡這種明確的行爲,如果它在這些微小的差異上吐出錯誤,它會更好。 – Eonil 2013-03-06 03:24:39

相關問題