无法在PostgreSQL中创建名为“user”的数据库表

时间:2014-03-07 17:00:06

标签: hibernate postgresql identifier

似乎PostgreSQL不允许创建名为“user”的数据库表。但MySQL将允许创建这样的表。

这是因为它是关键词吗?但是Hibernate无法识别任何问题(即使我们设置了PostgreSQLDialect)。

4 个答案:

答案 0 :(得分:98)

user是一个保留字,对于标识符(表,列)使用保留字通常不是一个好主意。

如果你坚持这样做,你必须把表名放在双引号中:

create table "user" (...);

但是,总是在引用表时需要使用双引号。此外,表名称区分大小写。 "user"是与"User"不同的表名。

如果你想节省很多麻烦,请使用其他名称。 usersuser_account,...

有关引用标识符的更多详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

答案 1 :(得分:8)

可以使用JPA指定带有下一语法的tablename:

@Table(name="\"user\"")

答案 2 :(得分:2)

我们之前也有同样的问题,只是将表名从user更改为app_user。由于使用了Hibernate / JPA。我们认为这样会更容易。 希望此小技巧可以对其他人有所帮助。

答案 3 :(得分:1)

一个人可以在cache_classes之外的模式中创建表user。 示例:

public