web-dev-qa-db-fra.com

Restrictions de nom de colonne de table Postgres?

Je l'ai fait en psql:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT, ip TEXT);

Je reçois

ERROR:  syntax error at or near "user" LINE 1: ...BLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT,...

Je fais:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, userd TEXT, ip TEXT);

Ça marche.
Notez l'utilisateurd au lieu de l'utilisateur.

Y a-t-il des restrictions sur les noms de colonne qu'une table peut avoir? (postgresql v9.1.3)

34
resting

Voici un joli tableau de mots réservés dans PostgreSQL:
http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

Il est probablement préférable d'éviter simplement d'utiliser ces mots comme noms de table ou de colonne.
Une alternative, cependant, est de mettre l'identifiant entre guillemets, par exemple:

CREATE TABLE IF NOT EXISTS apiss (
    skey TEXT, 
    time INTEGER, 
    "user" TEXT, 
    ip TEXT);
66
bernie

Dans mon entreprise, j'ai dû scanner une base de données entière pour les mots réservés. J'ai résolu la tâche avec l'aide de

select * from pg_get_keywords()
29
R13e