Câu trả lời:
( Cập nhật - Cảm ơn những người đã bình luận )
Giả sử bạn có một bảng được đặt tên test1
, mà bạn muốn thêm một cột tăng tự động, khóa chính id
(thay thế). Lệnh sau phải đủ trong các phiên bản gần đây của PostgreSQL:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Trong các phiên bản cũ của PostgreSQL (trước 8.x?), Bạn phải làm tất cả công việc bẩn thỉu. Chuỗi lệnh sau nên thực hiện thủ thuật:
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
Một lần nữa, trong các phiên bản gần đây của Postgres, điều này gần tương đương với lệnh đơn ở trên.
ADD PRIMARY KEY
cũng tạo ra một NOT NULL
ràng buộc (được thử nghiệm trong postgres 9.3) như mong đợi và mong muốn.
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Đây là tất cả những gì bạn cần:
id
cộtTín dụng được trao cho @resnyanskiy, người đã đưa ra câu trả lời này trong một bình luận.
ALTER TABLE <table> DROP CONSTRAINT <pkey_name>;
Để sử dụng cột nhận dạng trong v10,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
Để biết giải thích về các cột danh tính, hãy xem https://blog.2ndquadrant.com/postgresql-10-identity-columns/ .
Để biết sự khác biệt giữa TẠO B BYNG DEFAULT và LUÔN ĐƯỢC TẠO, hãy xem https://www.cybertec-postgresql.com/en/fterences-gains-and-pit thác / .
Để thay đổi trình tự, hãy xem https://popsql.io/learn-sql/postgresql/how-to-alter- resultence-in-postgresql / .
SQL Error [23502]: ERROR: column "id" contains null values
Tôi đáp xuống đây vì tôi cũng đang tìm kiếm thứ gì đó tương tự. Trong trường hợp của tôi, tôi đã sao chép dữ liệu từ một tập hợp các bảng phân tầng có nhiều cột vào một bảng trong khi cũng gán các id hàng cho bảng đích. Đây là một biến thể của các phương pháp trên mà tôi đã sử dụng. Tôi đã thêm cột nối tiếp ở cuối bảng mục tiêu của mình. Theo cách đó, tôi không phải có một trình giữ chỗ cho nó trong câu lệnh Chèn. Sau đó, chọn đơn giản * vào bảng mục tiêu tự động điền vào cột này. Đây là hai câu lệnh SQL mà tôi đã sử dụng trên PostgreSQL 9.6.4.
ALTER TABLE target ADD COLUMN some_column SERIAL;
INSERT INTO target SELECT * from source;