web-dev-qa-db-fra.com

Changer la colonne existante dans PG en clé primaire auto-incrémentielle

J'ai une base de données dans Postgresql, qui a été migrée depuis SQL Server (uniquement les données).
Sur SQL Server, une table de cette base de données a ces colonnes:

measure_id
datum
measure

measure_id est la clé primaire auto-incrémentielle, datum est datetime et measure est float.
Après la migration à Postrgresql, measure_id est une colonne de type bigint.

Comment puis-je modifier cette colonne (measure_id) à bigserial et l'assigner comme clé primaire, maintenant que ma table est pleine de données?

11
zetah

Créez une séquence et utilisez-la comme valeur par défaut pour la colonne:

create sequence measures_measure_id_seq
   owned by measures.measure_id;

alter table measures
   alter column measure_id set default nextval('measures_measure_id_seq');

commit;

C'est essentiellement ce que fait serial.

Voir le manuel pour plus de détails:
http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL

15