【发布时间】:2018-08-02 03:28:37
【问题描述】:
我正在尝试在postgres 9.6.2 版中的表中添加一列。
$ psql --version
psql (PostgreSQL) 9.6.2
因此,我引用的是ALTER TABLE documentation for postgres 9.6。
文档说:
更改表 [如果存在] [仅] 名称 [*] 动作 [, ... ]
其中操作是以下之一:
ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
我有一张桌子task:
=> select * from task;
id | name
----+------
(0 rows)
我想使用幂等命令在其上插入列 state(即,它检查是否已经创建了 state 列)。该命令是:
ALTER TABLE task ADD COLUMN IF NOT EXISTS state BIGINT NOT NULL;
但是,这会在NOT 处产生语法错误:
=> ALTER TABLE task ADD COLUMN IF NOT EXISTS state BIGINT NOT NULL;
ERROR: syntax error at or near "NOT"
LINE 1: ALTER TABLE task ADD COLUMN IF NOT EXISTS state BIGINT NOT N...
此命令是否与文档不一致?如何解决语法错误?
注意:当我删除 IF NOT EXISTS 短语时,该命令可以正常工作,但在这种情况下生成的命令不是所需的幂等。
【问题讨论】:
-
select version();说什么?仅仅因为psql来自 9.6.2 并不意味着您要连接的服务器是 9.6.2。 -
@muistooshort 你是对的。
select version()显示版本为 9.4,并且 9.4 的文档未显示已创建列的 IF NOT EXISTS 选项。看来我必须考虑如何在没有该选项的情况下使命令具有幂等性。
标签: postgresql postgresql-9.4 postgresql-9.6