2010-08-29 31 views
13

PostgreSQL không cho phép thay đổi dạng xem (tức là thêm cột, thay đổi thứ tự cột, thêm tiêu chí, v.v.) nếu nó có đối tượng phụ thuộc. Đây thực sự là nhận được khó chịu vì bạn phải viết một kịch bản để:Cách thay đổi giao diện trong PostgreSQL

  1. Thả tất cả các đối tượng phụ thuộc,
  2. Thay đổi quan điểm,
  3. lí tất cả các đối tượng phụ thuộc trở lại.

Tôi hiểu rằng các nhà phát triển postgreSQL có mối quan tâm rất hợp lý để ngăn chặn việc thay đổi chế độ xem. Nhưng các bạn có bất kỳ kịch bản/shot-cắt để làm tất cả những thứ thủ công trong một chạy duy nhất?

Trả lời

4

Thêm cột mới không phải là vấn đề, thay đổi kiểu dữ liệu hoặc thay đổi thứ tự của các cột, đó là nơi bạn gặp sự cố.

  1. Đừng thay đổi thứ tự, nó không phải mà quan trọng dù sao, chỉ cần thay đổi truy vấn của bạn:

    SELECT a, b TỪ view_name;

    CHỌN b, tên chế độ xem FROM;

  2. Khi bạn phải thay đổi kiểu dữ liệu của một cột, bạn cũng phải kiểm tra các đối tượng phụ thuộc . Những điều này có thể gặp sự cố với loại dữ liệu mới này. Chỉ cần lấy định nghĩa của đối tượng này và tạo lại sau khi thay đổi . Information_schema và pg_catalog giúp bạn.

  3. Thực hiện tất cả thay đổi trong một giao dịch .
+0

Việc thêm cột là một vấn đề khi chế độ xem có các đối tượng phụ thuộc. Thử cái này; CREATE TABLE một ( col_a INT, col_b VARCHAR (2), col_c NGÀY ); TẠO HOẶC THAY THẾ chế độ xem vw_one AS CHỌN col_a, col_b TỪ một; TẠO HOẶC THAY THẾ XEM vw_two AS CHỌN col_a, col_b TỪ vw_one; TẠO HOẶC THAY THẾ XEM vw_one AS CHỌN col_a, col_b, col_c TỪ một; Tôi có thiếu gì đó không? – mevdiven

+0

Nó hoạt động tốt hơn ở đây, 9.0beta4. Tôi không có phiên bản cũ hơn ở máy dev của mình, nhưng nó cũng hoạt động ở 8.4. thông báo lỗi gì bạn nhận được? –

+0

Họ có thể đã sửa trên phiên bản 9.0. Tôi đã thấy một vài yêu cầu sửa lỗi trong cộng đồng postgreSQL. Đây là lỗi tôi nhận được. LRI: không thể thay đổi số cột trong chế độ xem Trạng thái SQL: 42P16 – mevdiven

1

Nếu tôi đặt chế độ "thả chế độ xem xyz; cam kết" bổ sung; trước câu lệnh "tạo hoặc thay thế xem xyz dưới dạng ...", ít nhất trong nhiều trường hợp, tôi giải quyết vấn đề chặn được mô tả ở trên.

Các vấn đề liên quan