Gunakan CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Kemudian tambahkan kolom default ke scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Jika Anda ingin mengikat urutan ke kolom (jadi dihapus saat kolom dihapus), jalankan juga:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Semua ini dapat diganti dengan menggunakan tipe data semu serial
untuk kolom job_id
untuk memulai dengan:
- Mengganti nama tabel dengan aman dan rapi yang menggunakan kolom kunci utama serial di Postgres?
Jika tabel Anda sudah memiliki baris, Anda mungkin ingin mengatur SEQUENCE
ke nilai tertinggi berikutnya dan isi nilai serial yang hilang dalam tabel:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Opsional:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Cara memeriksa urutan secara efisien untuk nilai yang digunakan dan tidak digunakan di PostgreSQL
- Postgres mengubah urutan secara manual
- Bagaimana cara mengatur ulang urutan kunci utama postgres ketika tidak sinkron?
Satu-satunya perbedaan yang tersisa, serial
kolom juga disetel ke NOT NULL
. Anda mungkin juga menginginkannya atau tidak:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Tapi kamu tidak bisa cukup ubah jenis integer
yang ada :
ALTER TABLE scores ALTER job_id TYPE serial;
serial
bukan tipe data yang sebenarnya. Ini hanyalah fitur kemudahan notasi untuk CREATE TABLE
.
Dalam Postgres 10 atau yang lebih baru, pertimbangkan sebuah IDENTITY
kolom:
- Kolom tabel kenaikan otomatis