Thay đổi cột nếu tồn tại postgres

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;
2

alter 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;
4

ALTER 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 TABLE0 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 TABLE1;

ALTER FOREIGN TABLE3

Biểu mẫu này xóa cột hệ thống ALTER FOREIGN TABLE0 khỏi bảng. Điều này hoàn toàn tương đương với ALTER FOREIGN TABLE5, ngoại trừ việc nó sẽ không khiếu nại nếu không có cột ALTER FOREIGN TABLE0

ALTER FOREIGN TABLE7

Biể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 TABLE8

Biể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 TABLE9

Biể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 COLUMN0 ['______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 COLUMN2, SETADD COLUMN4 chỉ định hành động sẽ được thực hiện. ADD COLUMN2 đượ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 COLUMN6

Biểu mẫu ADD COLUMN6 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 COLUMN8

Hì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 COLUMN6 và ADD COLUMN8 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

CASCADE0

Tên của một cột mới hoặc hiện có

CASCADE1

Tên mới cho một cột hiện có

CASCADE2

Tên mới cho bảng

CASCADE3

Kiể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ó

CASCADE4

Ràng buộc bảng mới cho bảng nước ngoài

CASCADE5

Tê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]

CASCADE7

Từ 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

CASCADE8

Tên của một trình kích hoạt để tắt hoặc bật

CASCADE9

Tắ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 EXISTS0

Vô 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 EXISTS1

Bả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 EXISTS2

Tên người dùng của chủ sở hữu mới của bảng

IF EXISTS3

Tê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 EXISTS6, một ràng buộc IF EXISTS7 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ừ xa

Tham 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 COLUMN2, ADD COLUMN4 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 TYPE4 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

Làm cách nào để đổi tên nếu tồn tại trong PostgreSQL?

Thật không may là PostgreSQL không cung cấp tùy chọn IF EXISTS cho mệnh đề RENAME . Nếu bạn đổi tên một cột được tham chiếu bởi các đối tượng cơ sở dữ liệu khác, chẳng hạn như dạng xem, ràng buộc khóa ngoài, trình kích hoạt và thủ tục được lưu trữ, PostgreSQL sẽ tự động thay đổi tên cột trong các đối tượng phụ thuộc.

Cái nào đúng khi thay đổi một cột trong PostgreSQL?

Cú pháp để sửa đổi một cột trong bảng trong PostgreSQL [sử dụng câu lệnh ALTER TABLE] là. ALTER TABLE table_name ALTER COLUMN column_name TYPE column_definition; table_name . Tên của bảng cần sửa đổi .

Làm cách nào để thêm ràng buộc vào cột hiện có trong PostgreSQL?

Thêm ràng buộc vào bảng trong PostgreSQL .
Syntax: ALTER TABLE ADD CONSTRAINT ;.
Ví dụ. Thêm ràng buộc duy nhất. ALTER TABLE employee ADD CONSTRAINT employee_unq UNIQUE[email];
Ví dụ. Thêm ràng buộc NOT NULL. .
Ví dụ. Xóa ràng buộc NOT NULL

Chúng tôi có thể thay đổi tên của cột trong Postgres không?

Trong PostgreSQL, mệnh đề RENAME COLUMN được sử dụng với câu lệnh ALTER TABLE để đổi tên một hoặc nhiều cột trong bảng .

Chủ Đề