Postgres 表列名限制?

我在 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。

对于表的列名是否有一些限制? (postgreql v9.1.3)

97670 次浏览

下面是 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

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

select * from pg_get_keywords()
select * from pg_get_keywords() where catdesc = 'reserved'