Thiết lập giá trị mặc định khi bạn thêm cột mới:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
Thay đổi giá trị mặc định cho các cột hiện tại không thay đổi dữ liệu hiện có do cơ sở dữ liệu không có cách nào để biết mà giá trị nên được thay đổi ; không có cột "cột này có giá trị mặc định" trên giá trị cột, chỉ có giá trị mặc định (ban đầu là NULL vì bạn không chỉ định bất kỳ thứ gì khác) và giá trị hiện tại (cũng là NULL) nhưng cách để biết sự khác biệt giữa "NULL bởi vì nó là mặc định "và" NULL vì nó được thiết lập rõ ràng thành NULL ". Vì vậy, khi bạn thực hiện theo hai bước:
- Thêm cột.
- Thay đổi giá trị mặc định.
PostgreSQL sẽ không áp dụng giá trị mặc định cho cột bạn vừa thêm. Tuy nhiên, nếu bạn thêm cột và cung cấp giá trị mặc định cùng một lúc thì PostgreSQL không biết những hàng nào có giá trị mặc định (tất cả chúng) để nó có thể cung cấp các giá trị khi cột được thêm vào.
Bằng cách này, bạn có thể muốn có một NOT NULL vào cột đó quá:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
Và, như a_horse_with_no_name ghi chú, nếu bạn chỉ có ý định sử dụng rid_seq
cho cột test.rid
của bạn sau đó bạn có thể muốn set its owner column để test.rid
để các chuỗi sẽ được giảm nếu cột được lấy ra:
alter sequence rid_seq owned by test.rid;
Nguồn
2012-02-26 22:57:30
Cảm ơn bạn đã trích đoạn nội dung. Tôi đang chạy vào lỗi cú pháp khi tôi cố gắng chạy nó: 'tại hoặc gần @'. Tôi không quen thuộc với định nghĩa biến trong Postgreqsl vì vậy tôi không chắc chắn nếu có cái gì đó rõ ràng tôi cần phải thay đổi. – djq
(1) Hình như SQL Server hoặc cú pháp MySQL có thể, nó sẽ không hoạt động trong PostgreSQL. (2) Điều đó sẽ gây ra một số rắc rối ngay sau khi các hàng mới được thêm vào khi bạn không sử dụng hết các giá trị từ chuỗi, giá trị tiếp theo xuất hiện trong chuỗi sẽ là 1 mặc dù bạn đã sử dụng nó cho một ' rid'. –
Bắt tốt, [mu quá ngắn] (http://stackoverflow.com/users/479863/mu-is-too-short), về việc không sử dụng hết các giá trị chuỗi. Và có, tôi khá tốt trong việc viết mã MS SQL Server (mà tôi sẽ giải quyết vấn đề này một chút khác đi) và không quen thuộc với PostgreSQL.Điểm mà tôi đã cố gắng tạo ra là sự khác biệt giữa việc xác định ràng buộc và áp dụng nó, câu trả lời được giải thích tốt hơn là I. –