Verwenden Sie CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Fügen Sie dann einen Spaltenstandard zu scores.job_id
hinzu :
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Wenn Sie binden möchten die Sequenz zur Spalte (so dass sie gelöscht wird, wenn die Spalte gelöscht wird), führen Sie auch aus:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
All dies kann durch die Verwendung des Pseudo-Datentyps serial
ersetzt werden für die Spalte job_id
zu Beginn:
- Tabellen sicher und sauber umbenennen, die serielle Primärschlüsselspalten in Postgres verwenden?
Wenn Ihre Tabelle bereits Zeilen enthält, möchten Sie vielleicht die SEQUENCE
festlegen auf den nächsthöheren Wert und ergänzen Sie fehlende Serienwerte in der Tabelle:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Optional:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Wie man eine Sequenz in PostgreSQL effizient auf verwendete und nicht verwendete Werte überprüft
- Postgres ändert Sequenz manuell
- Wie kann man die Primärschlüsselsequenz von Postgres zurücksetzen, wenn sie nicht mehr synchron ist?
Der einzige verbleibende Unterschied, eine serial
Spalte ist auch auf NOT NULL
gesetzt . Das können Sie auch wollen oder nicht:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Aber Sie können nicht ändern Sie einfach den Typ einer bestehenden integer
:
ALTER TABLE scores ALTER job_id TYPE serial;
serial
ist kein eigentlicher Datentyp. Es ist nur eine Notationsfunktion für CREATE TABLE
.
Betrachten Sie in Postgres 10 oder höher eine IDENTITY
Spalte:
- Tabellenspalte automatisch erhöhen