2012-06-05 53 views
19

私はpsqlでこれをしなかった:Postgresテーブルのカラム名の制限はありますか?

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

は私がやる

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

を得る:

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

それは動作します。
userではなくuserdに注意してください。

テーブルが持つことができる列名にいくつかの制限がありますか?
(PostgresSQLのはv9.1.3)

答えて

40

ここではPostgreSQLの予約語の素敵なテーブルです:
http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html

それは単に卓上または列名としてそれらの単語の使用を避けるためにおそらく最高です。
代替が、しかし、二重引用符で識別子、例えば:私の会社で

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

の助けを借りて、タスクを解決し、「お使いの引用識別子は、永遠に彼らはあなたの運命を支配する場合。」引用符で囲まれた識別子は、特に引用符で囲まれていないものと組み合わせて使用​​する、右の痛みです。 OPが言ったように、それらを完全に避けるのが最善です。 –

17

を囲むことで、私は予約語のため、データベース全体をスキャンする必要がありました。私は、ヨーダを言い換えするに

select * from pg_get_keywords() 
+0

さまざまなバージョンに適しています – Rodrigo

関連する問題