Postgres表列名称限制?

res*_*ing 37 postgresql create-table

我在psql中这样做了:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT, ip TEXT);
Run Code Online (Sandbox Code Playgroud)

我明白了

ERROR:  syntax error at or near "user" LINE 1: ...BLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, user TEXT,...
Run Code Online (Sandbox Code Playgroud)

我做:

CREATE TABLE IF NOT EXISTS apiss (skey TEXT, time INTEGER, userd TEXT, ip TEXT);
Run Code Online (Sandbox Code Playgroud)

有用.
请注意userd而不是user.

表可以拥有的列名是否有一些限制?(postgresql v9.1.3)

ber*_*nie 69

这是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);
Run Code Online (Sandbox Code Playgroud)

  • 用Yoda的话来说,"如果你使用引用的标识符,它们将永远支配你的命运." 带引号的标识符使用起来非常痛苦,特别是与非引用标记混合使用.正如OP所说,最好完全避免它们. (45认同)

R13*_*13e 31

在我的公司,我不得不扫描整个数据库中的保留字.我帮助解决了这个问题

select * from pg_get_keywords()
Run Code Online (Sandbox Code Playgroud)