Użyj CREATE SEQUENCE :
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Następnie dodaj domyślną kolumnę do scores.job_id :
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Jeśli chcesz powiązać sekwencję do kolumny (aby usunąć ją, gdy kolumna zostanie usunięta), uruchom także:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Wszystko to można zastąpić użyciem pseudotypu danych serial dla kolumny job_id na początek:
- Bezpiecznie i czysto zmieniaj nazwy tabel używających kolumn szeregowych kluczy podstawowych w Postgresie?
Jeśli Twoja tabela ma już wiersze, możesz ustawić SEQUENCE do następnej najwyższej wartości i uzupełnij brakujące wartości seryjne w tabeli:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Opcjonalnie:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Jak skutecznie sprawdzić sekwencję pod kątem używanych i nieużywanych wartości w PostgreSQL
- Postgres ręcznie zmienia sekwencję
- Jak zresetować podstawową sekwencję klawiszy Postgresa, gdy nie będzie ona zsynchronizowana?
Jedyna pozostała różnica, serial kolumna jest również ustawiona na NOT NULL . Możesz też tego chcieć lub nie:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Ale nie możesz po prostu zmień typ istniejącej integer :
ALTER TABLE scores ALTER job_id TYPE serial;
serial nie jest rzeczywistym typem danych. To tylko notacyjna, wygodna funkcja dla CREATE TABLE .
W Postgresie 10 lub nowszym rozważ IDENTITY kolumna:
- Automatyczna inkrementacja kolumny tabeli