Cannot create a database table named 'user' in PostgreSQL
It seems PostgreSQL does not allow to create a database table named 'user'. But MySQL will allow to create such a table.
Is that because it is a key word? But Hibernate cannot identify any issue (even if we set the PostgreSQLDialect).
Solution 1:
user
is a reserved word and it's usually not a good idea use reserved words for identifiers (tables, columns).
If you insist on doing that you have to put the table name in double quotes:
create table "user" (...);
But then you always need to use double quotes when referencing the table. Additionally the table name is then case-sensitive. "user"
is a different table name than "User"
.
If you want to save yourself a lot of trouble use a different name. users
, user_account
, ...
More details on quoted identifiers can be found in the manual: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
Solution 2:
It is possible to specify tablename with JPA with next syntax:
@Table(name="\"user\"")
Solution 3:
We had this same issue time ago, and we just changed the table name from user
to app_user
. Due to the use of Hibernate/JPA. We thought it would be easier this way.
Hope this little fix will help someone else.
Solution 4:
You can create a table user
in a schema other than public
.
The example:
CREATE SCHEMA my_schema;
CREATE TABLE my_schema.user(...);