Thay thế một khung nhìn cụ thể hóa trong Postgres


23

Tôi có một cái nhìn cụ thể hóa trong Postgres 9.3đó tôi muốn cập nhật với các cột mới. Tuy nhiên, các chế độ xem cụ thể hóa khác cũng phụ thuộc vào chế độ xem này và thông báo lỗi cho biết rằng việc giảm chế độ xem là không thể khi các đối tượng khác phụ thuộc vào chế độ xem đó.

LRI: không thể bỏ chế độ xem được cụ thể hóa mới nhất vì các đối tượng khác phụ thuộc vào nó

Nó cũng xuất hiện từ tài liệu rằng từ khóa REPLACE không hợp lệ cho chế độ xem cụ thể hóa. Có lối tắt nào ngoài việc thả tất cả các đối tượng phụ thuộc và xây dựng lại từng đối tượng không?


7
Đáng buồn thay, tôi nghĩ rằng bạn bị mắc kẹt với việc thả tất cả chúng và xây dựng lại.
Craig Ringer

@CraigRinger quan tâm đến việc thêm điều này như một câu trả lời?
dezso

Câu trả lời:


17

Kể từ PostgreQuery 9.4: Khác với tài liệu của CREATE VIEW , tài liệu của CREATE MATERIALIZED VIEW KHÔNG đề cập đến từ khóa REPLACE. Dường như không có lối tắt nào ngoài việc bỏ tất cả các đối tượng phụ thuộc và xây dựng lại từng đối tượng.

Khi bạn làm như vậy, tôi chỉ có thể đề nghị hai điều nhỏ:

  1. Sử dụng DROP MATERIALIZED VIEW blabla CASCADE để có danh sách tất cả các đối tượng phụ thuộc
  2. Làm thả và giải trí của tất cả các đối tượng phụ thuộc trong một giao dịch.

1
Cảm ơn, đây chính xác là cách tôi đã làm. Thật khó để giữ thẳng vì tôi đang xây dựng một quan điểm cụ thể hóa cho các mục đích phân tích được sử dụng lại trong nhiều quan điểm khác. Cái nhìn cơ sở đó hiếm khi thay đổi, nhưng cái nhìn phụ thuộc vào nó thay đổi hàng ngày.
Giăng

4

Đối với tình huống của tôi, tôi thích hạn chế các giọt bằng cách sử dụng lớp xem:

  1. Tạo một bản sao của chế độ xem được vật chất hóa có hậu tố "_new" và cũng sử dụng "KHÔNG CÓ DỮ LIỆU" để thực hiện, đảm bảo mọi chỉ mục cũng được tạo bằng hậu tố và bất kỳ đối tượng phụ thuộc nào khác được phát hiện qua DROP ... CASCADE
  2. Tạo một khung nhìn theo khung nhìn cụ thể hóa mới để cung cấp lớp trừu tượng, do đó tôi chỉ cần thay đổi nó ở một nơi
  3. Thay vào đó, các phụ thuộc hiện có thay vào đó đề cập đến chế độ xem mới (làm mới dữ liệu nếu cần trước đó)
  4. Bỏ quan điểm cụ thể hóa ban đầu và các chỉ số mà bây giờ không có bất kỳ người phụ thuộc nào
  5. THAY ĐỔI khung nhìn cụ thể hóa và các chỉ mục để bỏ hậu tố để khôi phục tên gốc

ví dụ.

create table test (myfield int);
insert into test values (1);
create materialized view mv_test as select myfield from test;
create view v_test as select myfield from mv_test;
select * from v_test;
create materialized view mv_test_new as select myfield, myfield+1 as myfield2 from test;
alter view v_test rename to v_test_old;
alter materialized view mv_test rename to mv_test_old;
create view v_test as select myfield,myfield2 from mv_test_new;
select * from v_test;
alter materialized view mv_test_new rename to mv_test;
drop view v_test_old; -- when ready
drop materialized view mv_test_old; -- when ready

Tôi không rõ ràng về hai bước cuối cùng. Là 4 một câu chạy vào 5? bạn có thể làm một ví dụ nhanh với một số quan điểm và quan điểm có tên?
kimbo305

sửa câu rút gọn và thêm ví dụ
RuiDC

1

Trong PGAdmin (phiên bản 4.x), tôi có thể dễ dàng sửa đổi định nghĩa (tôi đã thêm một mệnh đề where) trong hộp thuộc tính. Vấn đề của bạn có thể được giải quyết theo cách đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.