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.
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?