Sử dụng CREATE SEQUENCE
:
CREATE SEQUENCE scores_job_id_seq; -- = default name for plain a serial
Sau đó, thêm một cột mặc định vào scores.job_id
:
ALTER TABLE scores ALTER COLUMN job_id SET DEFAULT nextval('scores_job_id_seq');
Nếu bạn muốn ràng buộc trình tự đến cột (vì vậy nó sẽ bị xóa khi cột bị xóa), cũng chạy:
ALTER SEQUENCE scores_job_id_seq OWNED BY scores.job_id;
Tất cả điều này có thể được thay thế bằng cách sử dụng kiểu dữ liệu giả serial
cho cột job_id
bắt đầu bằng:
- Đổi tên một cách an toàn và rõ ràng các bảng sử dụng các cột khóa chính nối tiếp trong Postgres?
Nếu bảng của bạn đã có hàng, bạn có thể muốn đặt SEQUENCE
đến giá trị cao nhất tiếp theo và điền vào các giá trị nối tiếp còn thiếu trong bảng:
SELECT setval('scores_job_id_seq', COALESCE(max(job_id), 1)) FROM scores;
Tùy chọn:
UPDATE scores
SET job_id = nextval('scores_job_id_seq')
WHERE job_id IS NULL;
- Cách kiểm tra một chuỗi hiệu quả để tìm các giá trị đã sử dụng và chưa sử dụng trong PostgreSQL
- Postgres thay đổi trình tự theo cách thủ công
- Làm cách nào để đặt lại chuỗi khóa chính của postgres khi nó không đồng bộ?
Sự khác biệt duy nhất còn lại, một serial
cột cũng được đặt thành NOT NULL
. Bạn cũng có thể muốn hoặc không:
ALTER TABLE scores ALTER COLUMN job_id SET NOT NULL;
Nhưng bạn không thể chỉ cần thay đổi kiểu của integer
hiện có :
ALTER TABLE scores ALTER job_id TYPE serial;
serial
không phải là một kiểu dữ liệu thực tế. Đây chỉ là một tính năng tiện lợi mang tính ký hiệu cho CREATE TABLE
.
Trong Postgres 10 trở lên, hãy xem xét IDENTITY
cột:
- Cột bảng tăng dần tự động