web-dev-qa-db-fra.com

Impossible de créer une table de base de données nommée 'utilisateur' dans PostgreSQL

Il semble que PostgreSQL ne permette pas de créer une table de base de données nommée 'utilisateur'. Mais MySQL permettra de créer une telle table.

Est-ce parce que c'est un mot clé? Mais Hibernate ne peut identifier aucun problème (même si nous définissons le PostgreSQLDialect).

64
Channa

user est un mot réservé et il est généralement déconseillé d'utiliser des mots réservés pour les identifiants (tables, colonnes).

Si vous insistez pour cela, vous devez mettre le nom de la table entre guillemets:

create table "user" (...);

Mais alors vous toujours devez utiliser des guillemets doubles pour référencer le tableau. De plus, le nom de la table est sensible à la casse. "user" est un nom de table différent de "User".

Si vous voulez vous épargner beaucoup de peine, utilisez un nom différent. users, user_account, ...

Vous trouverez plus de détails sur les identificateurs cités dans le manuel: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

106

Il est possible de spécifier un nom de table avec JPA avec la syntaxe suivante:

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

Nous avons eu le même problème il y a longtemps et nous venons de changer le nom de la table de user à app_user. En raison de l'utilisation de Hibernate/JPA. Nous pensions que ce serait plus facile de cette façon. J'espère que ce petit correctif aidera quelqu'un d'autre.

2
Sergio A.