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