如何将 PostgreSQL 10 标识列添加到现有表中?

tin*_*lyx 8 postgresql alter-table identity postgresql-10

我正在阅读有关新的Postgres 10 标识列的信息,并了解了如何使用它SERIALCREATE TABLE.

是否也可以向现有表添加标识列?

例如,使用旧SERIAL列,我可以执行以下操作:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid SERIAL;
Run Code Online (Sandbox Code Playgroud)

对于标识列,是否有与上述相同的内容?我试过:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误:

错误:“BY”第 1 行或附近的语法错误:...R TABLE sourceTable ADD COLUMN ogc_fid GENERATED BY DEFAULT

我正在考虑用我的脚本中的SERIAL列替换列IDENTITY,只是想检查这是否可行。

ype*_*eᵀᴹ 12

您还需要声明列的类型(INTBIGINTSMALLINT):

ALTER TABLE sourceTable 
    ADD COLUMN ogc_fid int                -- int or bigint or smallint
        GENERATED BY DEFAULT AS IDENTITY;
Run Code Online (Sandbox Code Playgroud)

另外一定要使用最新的点版本。由于IDENTITY最近才添加,在 Postgres 10.2 之前存在影响此特定命令的错误。请参阅: 如何将 PostgreSQL 10 标识列添加到包含行的现有表中?

  • @tinlyx:并且一定要使用最新的点发布。在 Postgres 10.2 之前存在影响此特定命令的错误。参见:https://dba.stackexchange.com/a/200156/3684 (2认同)