Utilisez CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Ajoutez ensuite une colonne par défaut à scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Si vous voulez lier la séquence à la colonne (elle est donc supprimée lorsque la colonne est supprimée), exécutez également :
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Tout cela peut être remplacé par l'utilisation du pseudo-type de données serial
pour la colonne job_id
pour commencer :
- Renommer en toute sécurité et proprement les tables qui utilisent des colonnes de clé primaire série dans Postgres ?
Si votre tableau contient déjà des lignes, vous pouvez définir la SEQUENCE
à la valeur la plus élevée suivante et remplissez les valeurs de série manquantes dans le tableau :
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Facultativement :
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Comment vérifier efficacement une séquence pour les valeurs utilisées et inutilisées dans PostgreSQL
- Postgres modifie manuellement la séquence
- Comment réinitialiser la séquence de clé primaire de postgres lorsqu'elle n'est plus synchronisée ?
La seule différence restante, un serial
la colonne est également définie sur NOT NULL
. Vous pouvez ou non vouloir cela aussi :
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Mais vous ne pouvez pas modifiez simplement le type d'un integer
existant :
ALTER TABLE scores ALTER job_id TYPE serial;
serial
n'est pas un type de données réel. C'est juste une fonctionnalité de commodité de notation pour CREATE TABLE
.
Dans Postgres 10 ou version ultérieure, considérez une IDENTITY
colonne :
- Colonne de tableau d'incrémentation automatique