web-dev-qa-db-fra.com

Comment ajouter une colonne d'identité PostgreSQL 10 à une table existante?

Je lis sur la nouvelle colonne d'identité Postgres 1 , et j'ai vu comment elle est utilisée pour remplacer les colonnes SERIAL lorsque CREATE TABLE.

Est-il également possible d'ajouter une colonne d'identité à une table existante?

Par exemple, avec les anciennes colonnes SERIAL, je peux faire:

ALTER TABLE sourceTable ADD  COLUMN ogc_fid SERIAL;

Avec les colonnes d'identité, existe-t-il un équivalent de ce qui précède? J'ai essayé:

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

Mais j'ai une erreur:

ERREUR: erreur de syntaxe au niveau ou près de "BY" LIGNE 1: ... R TABLE sourceTable ADD COLUMN ogc_fid GENERATED BY DEFAULT

Je pense à remplacer les colonnes SERIAL par des colonnes IDENTITY dans mes scripts, et je voulais juste vérifier si cela était possible.

6
tinlyx

Vous devez également déclarer le type de la colonne (INT ou BIGINT ou SMALLINT):

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

Veillez également à utiliser la dernière version de point. Comme IDENTITY n'a été ajouté que récemment, il y avait des bogues affectant cette commande particulière avant Postgres 10.2. Voir: Comment ajouter une colonne d'identité PostgreSQL 10 à une table existante avec des lignes?

10
ypercubeᵀᴹ