2016-08-06 36 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) 

以后每次你引用该列使用双引号。