web-dev-qa-db-ja.com

PostgreSQL 10のID列を既存のテーブルに追加する方法は?

私は新しい Postgres 10 ID列 について読んでいて、SERIAL列をCREATE TABLE

ID列を既存のテーブルに追加することもできますか?

たとえば、古いSERIAL列を使用すると、次のことができます。

ALTER TABLE sourceTable ADD  COLUMN ogc_fid SERIAL;

ID列で、上記と同等のものはありますか?私は試した:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid GENERATED BY DEFAULT AS IDENTITY;

しかし、エラーが発生しました:

エラー:「BY」またはその付近の構文エラー1:... R TABLE sourceTable ADD COLUMN ogc_fid GENERATED BY DEFAULT

スクリプトでSERIAL列をIDENTITY列に置き換えることを考えており、これが可能かどうかを確認したいと思っています。

6
tinlyx

列の型も宣言する必要があります(INTまたはBIGINTまたはSMALLINT):

ALTER TABLE sourceTable 
    ADD COLUMN ogc_fid int                -- int or bigint or smallint
        GENERATED BY DEFAULT AS IDENTITY;

また、最新のポイントリリースを必ず使用してください。 IDENTITYは最近追加されたばかりなので、Postgres 10.2より前にこの特定のコマンドに影響するバグがありました。参照: 行を含む既存のテーブルにPostgreSQL 10のID列を追加する方法

10
ypercubeᵀᴹ