Použijte CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Poté přidejte výchozí sloupec do scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Pokud chcete svázat sekvence ke sloupci (takže se smaže, když je sloupec odstraněn), také spusťte:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
To vše lze nahradit použitím pseudo datového typu serial
pro sloupec job_id
pro začátek:
- Bezpečně a čistě přejmenovat tabulky, které používají sloupce sériového primárního klíče v Postgresu?
Pokud vaše tabulka již obsahuje řádky, možná budete chtít nastavit SEQUENCE
na další nejvyšší hodnotu a doplňte chybějící sériové hodnoty v tabulce:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Volitelně:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Jak efektivně kontrolovat sekvenci na použité a nepoužité hodnoty v PostgreSQL
- Postgres ručně upraví sekvenci
- Jak resetovat sekvenci primárních klíčů postgresu, když se nesynchronizuje?
Jediný zbývající rozdíl, serial
sloupec je také nastaven na NOT NULL
. To můžete nebo nemusíte chtít také:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Ale nemůžete stačí změnit typ existujícího integer
:
ALTER TABLE scores ALTER job_id TYPE serial;
serial
není skutečný datový typ. Je to pouze pohodlná funkce zápisu pro CREATE TABLE
.
V Postgres 10 nebo novějších zvažte IDENTITY
sloupec:
- Automaticky zvyšovat sloupec tabulky