2012-06-05 9 views
19

hice esto en psql:Restricciones de nombre de la columna de la tabla Postgres?

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

me sale

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

hago:

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

Funciona.
Tenga en cuenta el usuario en lugar del usuario.

¿Existen algunas restricciones en los nombres de columna que una tabla puede tener?
(v9.1.3 PostgresSQL)

Respuesta

40

He aquí una bonita mesa de palabras reservadas en PostgreSQL:
http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

Es probablemente el mejor para evitar el simple uso de esas palabras como mesa- o columna nombres.
Una alternativa, sin embargo, es para encerrar el identificador entre comillas dobles, por ejemplo .:

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

Parafraseando a Yoda, "Si identificadores entre comillas que utiliza, siempre van a dominar su destino". Los identificadores entre comillas son un buen uso, especialmente combinados con los no citados. Como dijo el OP, es mejor evitarlos por completo. –

17

En mi empresa, he tenido que escanear una base de datos completa para las palabras reservadas. He resuelto la tarea con la ayuda de

select * from pg_get_keywords() 
+0

bueno para diferentes versiones – Rodrigo

Cuestiones relacionadas