PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Thay đổi các cột PostgreSQL được sử dụng trong các dạng xem

Giải pháp lâu dài cho trường hợp này

Để tránh hoàn toàn sự cố, hãy sử dụng kiểu dữ liệu text hoặc varchar / character varying không có mã định độ dài thay vào đó là character varying(n) . Đọc về các loại dữ liệu này trong sách hướng dẫn.

CREATE TABLE monkey(name text NOT NULL)

Nếu bạn thực sự muốn thực thi độ dài tối đa, hãy tạo CHECK ràng buộc :

ALTER TABLE monkey 
  ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);

Bạn có thể thay đổi hoặc loại bỏ ràng buộc đó bất kỳ lúc nào mà không cần chạm vào các đối tượng phụ thuộc như khung nhìn và không buộc Postgres viết các hàng mới trong bảng do sự thay đổi loại (điều này không phải lúc nào cũng cần thiết trong phiên bản hiện đại của Postgres).

Giải thích chi tiết

Theo đề xuất của @Michael, tôi thêm một số thông tin chung:

Một khung nhìn trong PostgreSQL không chỉ là một "bí danh cho truy vấn con". Chế độ xem được triển khai dưới dạng các bảng đặc biệt với quy tắc ON SELECT TO my_view DO INSTEAD . (Đó là lý do tại sao bạn có thể thay đổi chế độ xem bằng ALTER TABLE lệnh.) Bạn có thể GRANT đặc quyền cho nó, thêm nhận xét hoặc thậm chí xác định giá trị mặc định của cột (hữu ích cho quy tắc ON INSERT TO my_view DO INSTEAD... ). Đọc thêm trong sách hướng dẫn tại đây hoặc tại đây.

Nếu bạn thay đổi các đối tượng cơ bản, bạn cũng cần thay đổi truy vấn xác định của bất kỳ chế độ xem tùy thuộc nào. ALTER VIEW câu lệnh chỉ có thể thay đổi các thuộc tính bổ trợ của một khung nhìn. Sử dụng CREATE OR REPLACE VIEW để thay đổi truy vấn - nó sẽ giữ lại mọi thuộc tính bổ sung.

Tuy nhiên, nếu bạn muốn thay đổi kiểu dữ liệu của các cột kết quả (như trong trường hợp ở trên), hãy CREATE OR REPLACE VIEW là không thể. Bạn phải DROP cũ và CREATE một cái nhìn mới. Điều này sẽ không bao giờ xóa bất kỳ dữ liệu nào của các bảng bên dưới. Nó sẽ Tuy nhiên, loại bỏ bất kỳ thuộc tính bổ sung nào của chế độ xem, chúng cũng phải được tạo lại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo người dùng với pgAdmin

  2. Sử dụng PgBouncer Connection Pooler cho PostgreSQL với ClusterControl 1.8.2

  3. Lưu đầu ra PL / pgSQL từ PostgreSQL vào tệp CSV

  4. Làm cách nào để cập nhật các hàng đã chọn với các giá trị từ tệp CSV trong Postgres?

  5. AMD, Intel và PostgreSQL