2012-06-05 84 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); 

它的工作原理。
請注意userd而不是user。

對錶名可以有什麼限制?
(PostgreSQL的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