2016-08-06 68 views
0

嗨所有需要一些幫助,無法創建表列名e.test2

是否有可能創建與列名稱e.test表?因爲我打的錯誤 ERROR: syntax error at or near "." SQL state: 42601 示例如下

create table test(e.test2 int) 
+0

是的,因爲'。'是一個特殊字符 – e4c5

+0

點被保留爲用於從列名稱中分離數據庫與表的字符。如果你真的有一個名爲'e'的數據庫或表,那麼隨意使用這個名字,否則就放棄它。 –

+0

如果您想以更復雜的方式組織您的表格,那麼只需列出一列簡單的列表,然後考慮[複合類型](https://www.postgresql.org/docs/current/static/rowtypes.html) – Abelisto

回答

0

一些補充,戈登的回答是:

永遠不要使用特殊字符,除了在表名或列名的下劃線。有幾個原因可以避免表或列名稱中的點。

的點是保留字符在SQL語法來表達從database.table.column

您可能需要使用您的數據庫在一些由若干「層」申請的合格的名字。至少在其他圖層中的一個表或列名稱中出現點時遇到問題的機率非常高。

I.e. Hibenate使用點作爲分隔符。從Hibernate docs

的@FieldResult名稱由用於 關係屬性名的,後跟一個句點(「」),隨後的名稱或 字段或主鍵的屬性。

如果你想使用的數據庫的C,C++或Java應用程序:這些語言不允許在類或類成員(場)名點(該點在這裏也作爲分隔符)。

因此,您將不得不在數據庫和應用程序之間翻譯名稱。

最後並非最不重要:加入。想象下面例子中的一列將包含一個點(即fir.stname)。我還沒有嘗試過,但我敢打賭你的數據庫會窒息。除此之外,它很混亂。

SELECT person.firstname, person.lastname, address.city 
FROM from person 
INNER JOIN address 
ON person.id = address.person; 

TL; DR你可以解決這些問題,如果你來回翻譯你的表/列字段,用引號。但是如果你只是在表格/列名中使用英文字母字符和下劃線,你可以省去很多麻煩。

如何爲列名使用空間?

我不會這麼做。我會使用下劃線而不是空格。

希望有所幫助。

2

我不建議將其命名與它一期一列。認真考慮使用下劃線代替:

create table test(e_test2 int) 

有一列特殊字符只是一種痛苦。

如果你想了解爲什麼這是一個壞主意,使用雙引號:

create table test("e.test2" int) 

以後每次你引用該列使用雙引號。