69

我在 psql 中这样做了:

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)

4

2 回答 2

114

这是 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);

此外,Postgres 为每个表保留系统列名供内部使用:“每个表都有几个系统列,这些列是系统隐式定义的。因此,这些名称不能用作用户定义列的名称。”

https://www.postgresql.org/docs/current/ddl-system-columns.html

于 2012-06-05T04:04:12.357 回答
64

在我的公司,我必须扫描整个数据库以查找保留字。我在帮助下解决了任务

select * from pg_get_keywords()
于 2015-08-03T14:30:59.723 回答