Giả sử chúng ta có một bảng user
với các phần tử
alter table user
add column phone_number bigint;
0 và alter table user
add column phone_number bigint;
1. Bây giờ chúng ta cần thêm một cột mới alter table user
add column phone_number bigint;
2alter table user
add column phone_number bigint;
Thêm nhiều cột
Xem xét liệu chúng ta có cần thêm hai cột nữa không,
alter table user
add column phone_number bigint;
3 và alter table user
add column phone_number bigint;
4ALTER TABLE user
ADD COLUMN salary int,
ADD COLUMN nickname varchar;
Thêm cột nếu không có
Với Postgres 9. 6, điều này có thể được thực hiện bằng cách sử dụng tùy chọn
alter table user
add column phone_number bigint;
5________số 8_______Thêm với các ràng buộc
Chúng tôi có thể thêm
alter table user
add column phone_number bigint;
6 giống như chúng tôi thêm các giá trị mặc định, không phải là null trong cột mới#syntax
ALTER TABLE table_name
ADD COLUMN column_name datatype
constraints;
Giả sử chúng ta cần thêm một cột mới có
alter table user
add column phone_number bigint;
7 vào cột đóAlter table user
add column isAlive boolean default true;
Để thêm một ràng buộc NOT NULL, bạn cần đặt một giá trị mặc định, bởi vì khi bạn thêm một cột mới, PostgreSQL sẽ lấy NULL làm giá trị cột cho hàng hiện tại, điều này vi phạm ràng buộc NOT NULL
Biểu mẫu này thêm một cột mới vào bảng ngoại, sử dụng cú pháp tương tự như CREATE FOREIGN TABLE. Không giống như trường hợp khi thêm cột vào bảng thông thường, không có gì xảy ra với bộ lưu trữ bên dưới. hành động này chỉ đơn giản tuyên bố rằng một số cột mới hiện có thể truy cập được thông qua bảng nước ngoài
DROP COLUMN [ IF EXISTS ]
Biểu mẫu này loại bỏ một cột từ bảng nước ngoài. Bạn sẽ cần phải nói CASCADE
nếu bất cứ điều gì bên ngoài bảng phụ thuộc vào cột; . Nếu IF EXISTS
được chỉ định và cột không tồn tại, không có lỗi nào được đưa ra. Trong trường hợp này, một thông báo được ban hành thay vì
SET DATA TYPE
Form này thay đổi kiểu một cột của bảng nước ngoài. Một lần nữa, điều này không ảnh hưởng đến bất kỳ bộ nhớ cơ bản nào. hành động này chỉ đơn giản là thay đổi loại mà PostgreSQL cho rằng cột đó có
SET
/ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;0
Các biểu mẫu này đặt hoặc xóa giá trị mặc định cho một cột. Các giá trị mặc định chỉ áp dụng trong các lệnh
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;1 hoặc
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;2 tiếp theo;
SET
/ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;4
Đánh dấu cột là cho phép hoặc không cho phép giá trị null
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;5
Biểu mẫu này đặt mục tiêu thu thập số liệu thống kê trên mỗi cột cho các hoạt động PHÂN TÍCH tiếp theo. Xem biểu mẫu tương tự của ALTER TABLE để biết thêm chi tiết
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;6 =
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;7 [,. ] ]
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;8 [,. ] ]
Biểu mẫu này đặt hoặc đặt lại các tùy chọn theo thuộc tính. Xem biểu mẫu tương tự của ALTER TABLE để biết thêm chi tiết
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;9
Biểu mẫu này đặt chế độ lưu trữ cho một cột. Xem biểu mẫu tương tự của ALTER TABLE để biết thêm chi tiết. Lưu ý rằng chế độ lưu trữ không có tác dụng trừ khi trình bao bọc dữ liệu nước ngoài của bảng chọn chú ý đến nó
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];0 [ KHÔNG HỢP LỆ ]
Biểu mẫu này thêm một ràng buộc mới vào bảng ngoại, sử dụng cú pháp tương tự như CREATE FOREIGN TABLE. Hiện chỉ hỗ trợ ràng buộc
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];1
Không giống như trường hợp khi thêm một ràng buộc vào một bảng thông thường, không có gì được thực hiện để xác minh ràng buộc là chính xác; . [Xem phần thảo luận trong TẠO BẢNG NGOÀI. ] Nếu ràng buộc được đánh dấu là
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];2, thì ràng buộc đó không được coi là giữ, mà chỉ được ghi lại để có thể sử dụng trong tương lai
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];3
Biểu mẫu này đánh dấu là hợp lệ một ràng buộc đã được đánh dấu trước đó là
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];2. Không có hành động nào được thực hiện để xác minh ràng buộc, nhưng các truy vấn trong tương lai sẽ giả định rằng nó giữ nguyên
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];5
Biểu mẫu này loại bỏ ràng buộc được chỉ định trên bảng nước ngoài. Nếu IF EXISTS
được chỉ định và ràng buộc không tồn tại, không có lỗi nào được đưa ra. Trong trường hợp này, một thông báo được ban hành thay vì
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];7/
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];8
Các biểu mẫu này định cấu hình việc kích hoạt [các] trình kích hoạt thuộc bảng nước ngoài. Xem biểu mẫu tương tự của ALTER TABLE để biết thêm chi tiết
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];9
Biểu mẫu này thêm một cột hệ thống ALTER FOREIGN TABLE
0 vào bảng [xem Phần 5. 4]. Sẽ không có gì nếu bảng đã có OID. Trừ khi trình bao bọc dữ liệu nước ngoài của bảng hỗ trợ OID, cột này sẽ chỉ đọc là số không
Lưu ý rằng điều này không tương đương với ALTER FOREIGN TABLE
1;
ALTER FOREIGN TABLE
3Biểu mẫu này xóa cột hệ thống ALTER FOREIGN TABLE
0 khỏi bảng. Điều này hoàn toàn tương đương với ALTER FOREIGN TABLE
5, ngoại trừ việc nó sẽ không khiếu nại nếu không có cột ALTER FOREIGN TABLE
0
ALTER FOREIGN TABLE
7Biểu mẫu này thêm bảng nước ngoài đích làm bảng con mới của bảng cha đã chỉ định. Xem biểu mẫu tương tự của ALTER TABLE để biết thêm chi tiết
ALTER FOREIGN TABLE
8Biểu mẫu này xóa bảng nước ngoài đích khỏi danh sách con của bảng cha đã chỉ định
ALTER FOREIGN TABLE
9Biểu mẫu này thay đổi chủ sở hữu của bảng nước ngoài thành người dùng được chỉ định
ADD COLUMN
0 ['______13_______7'] [,. ] ]Thay đổi tùy chọn cho bảng nước ngoài hoặc một trong các cột của nó. ADD COLUMN
2, SET
và ADD COLUMN
4 chỉ định hành động sẽ được thực hiện. ADD COLUMN
2 được giả định nếu không có thao tác nào được chỉ định rõ ràng. Tên tùy chọn trùng lặp không được phép [mặc dù tùy chọn bảng và tùy chọn cột có cùng tên là được]. Tên và giá trị tùy chọn cũng được xác thực bằng thư viện trình bao bọc dữ liệu nước ngoài
ADD COLUMN
6Biểu mẫu ADD COLUMN
6 thay đổi tên của bảng nước ngoài hoặc tên của một cột riêng lẻ trong bảng nước ngoài
ADD COLUMN
8Hình thức này di chuyển bảng nước ngoài vào một lược đồ khác
Tất cả các hành động ngoại trừ ADD COLUMN
6 và ADD COLUMN
8 có thể được kết hợp thành một danh sách nhiều thay đổi để áp dụng song song. Ví dụ: có thể thêm một số cột và/hoặc thay đổi loại của một số cột trong một lệnh
Nếu lệnh được viết là DROP COLUMN [ IF EXISTS ]
1 và bảng ngoại lai không tồn tại, thì không có lỗi nào được đưa ra. Một thông báo được đưa ra trong trường hợp này
Bạn phải sở hữu bảng để sử dụng ALTER FOREIGN TABLE
. Để thay đổi lược đồ của một bảng nước ngoài, bạn cũng phải có đặc quyền DROP COLUMN [ IF EXISTS ]
3 trên lược đồ mới. Để thay đổi chủ sở hữu, bạn cũng phải là thành viên trực tiếp hoặc gián tiếp của vai trò sở hữu mới và vai trò đó phải có đặc quyền DROP COLUMN [ IF EXISTS ]
3 trên lược đồ của bảng. [Những hạn chế này thực thi rằng việc thay đổi chủ sở hữu không làm bất cứ điều gì bạn không thể làm bằng cách loại bỏ và tạo lại bảng. Tuy nhiên, siêu người dùng vẫn có thể thay đổi quyền sở hữu của bất kỳ bảng nào. ] Để thêm cột hoặc thay đổi loại cột, bạn cũng phải có đặc quyền DROP COLUMN [ IF EXISTS ]
5 đối với loại dữ liệu
Thông số
DROP COLUMN [ IF EXISTS ]
6
Tên [có thể đủ điều kiện lược đồ] của một bảng nước ngoài hiện có để thay đổi. Nếu DROP COLUMN [ IF EXISTS ]
7 được chỉ định trước tên bảng, thì chỉ bảng đó bị thay đổi. Nếu DROP COLUMN [ IF EXISTS ]
7 không được chỉ định, bảng và tất cả các bảng con của nó [nếu có] sẽ bị thay đổi. Theo tùy chọn, có thể chỉ định DROP COLUMN [ IF EXISTS ]
9 sau tên bảng để biểu thị rõ ràng rằng các bảng con được bao gồm
CASCADE
0Tên của một cột mới hoặc hiện có
CASCADE
1Tên mới cho một cột hiện có
CASCADE
2Tên mới cho bảng
CASCADE
3Kiểu dữ liệu của cột mới hoặc kiểu dữ liệu mới cho cột hiện có
CASCADE
4Ràng buộc bảng mới cho bảng nước ngoài
CASCADE
5Tên của một ràng buộc hiện có để loại bỏ
CASCADE
Tự động loại bỏ các đối tượng phụ thuộc vào cột hoặc ràng buộc đã loại bỏ [ví dụ: các dạng xem tham chiếu đến cột]
CASCADE
7Từ chối thả cột hoặc ràng buộc nếu có bất kỳ đối tượng phụ thuộc nào. Đây là hành vi mặc định
CASCADE
8Tên của một trình kích hoạt để tắt hoặc bật
CASCADE
9Tắt hoặc bật tất cả các trình kích hoạt thuộc bảng nước ngoài. [Điều này yêu cầu đặc quyền siêu người dùng nếu bất kỳ trình kích hoạt nào là trình kích hoạt được tạo bên trong. Hệ thống cốt lõi không thêm các trình kích hoạt như vậy vào các bảng nước ngoài, nhưng mã bổ sung có thể làm như vậy. ]
IF EXISTS
0Vô hiệu hóa hoặc kích hoạt tất cả các trình kích hoạt thuộc bảng nước ngoài ngoại trừ các trình kích hoạt được tạo bên trong
IF EXISTS
1Bảng cha để liên kết hoặc hủy liên kết với bảng nước ngoài này
IF EXISTS
2Tên người dùng của chủ sở hữu mới của bảng
IF EXISTS
3Tên của lược đồ mà bảng sẽ được chuyển đến
ghi chú
Từ khóa ________ 38 _______4 là nhiễu và có thể bỏ qua
Tính nhất quán với máy chủ nước ngoài không được kiểm tra khi một cột được thêm hoặc bớt với ADD COLUMN
hoặc IF EXISTS
6, một ràng buộc IF EXISTS
7 hoặc
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];1 được thêm vào hoặc một loại cột được thay đổi với
SET DATA TYPE
. Người dùng có trách nhiệm đảm bảo rằng định nghĩa bảng phù hợp với phía từ xaTham khảo CREATE FOREIGN TABLE để biết thêm mô tả về các tham số hợp lệ
ví dụ
Để đánh dấu một cột là không rỗng
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
Để thay đổi tùy chọn của một bảng nước ngoài
ALTER FOREIGN TABLE myschema.distributors OPTIONS [ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3'];
khả năng tương thích
Các biểu mẫu ADD COLUMN
2, ADD COLUMN
4 và SET DATA TYPE
phù hợp với tiêu chuẩn SQL. Các dạng khác là phần mở rộng PostgreSQL của tiêu chuẩn SQL. Ngoài ra, khả năng chỉ định nhiều hơn một thao tác trong một lệnh ALTER FOREIGN TABLE
là một phần mở rộng
SET DATA TYPE
4 có thể được sử dụng để loại bỏ cột duy nhất của bảng nước ngoài, để lại bảng không cột. Đây là một phần mở rộng của SQL, không cho phép các bảng nước ngoài không có cột