Postgres'te maddileştirilmiş görünümü değiştirme


23

Postgres 9.3Yeni sütunlarla güncellemek istediğim için somutlaştırılmış bir görüşüm var. Bununla birlikte, diğer maddileşmiş görünümler de bu görüşe dayanmaktadır ve hata mesajı, diğer nesneler buna bağlı olduğunda bir görüntünün bırakılmasının mümkün olmadığını göstermektedir.

ERROR: diğer nesneler buna bağlı olduğu için en son_işlemler üzerinden gerçekleşen görünümü bırakamaz

Ayrıca REPLACE anahtar sözcüğünün materyalize görünüm için geçerli olmadığı belgelerinden de anlaşılmaktadır. Tüm bağımlı nesneleri bırakmanın ve her birini yeniden oluşturmanın bir yolu var mı?


7
Ne yazık ki, hepsini bırakıp yeniden inşa etmekle sıkışıp kaldığınızı düşünüyorum.
Craig Ringer

@CraigRinger bunu bir cevap olarak eklemek ister misiniz?
dezso

Yanıtlar:


17

PostgreSQL 9.4'ten itibaren: CREATE VIEW'un dokümantasyonundan farklı olarak, CREATE MATERIALIZED VIEW'un dokümantasyonundan REPLACE anahtar kelimesinden bahsedilmez. Tüm bağımlı nesneleri bırakmanın ve her birini yeniden oluşturmanın bir yolu yok gibi görünüyor.

Bunu yaptığınızda, sadece iki küçük şey önerebilirim:

  1. Tüm bağımlı nesnelerin bir listesini almak için DROP MATERIALIZED VIEW blabla CASCADE kullanın
  2. Tek bir işlemle tüm bağımlı nesnenin bırakılması ve yeniden yaratılması.

1
Sağol, aynen böyle yapıyorum. Analitik amaçlar için başka bir bakış açısında tekrar kullanılan bir temel materyal oluşturdu. Bu temel görüş nadiren değişir, ancak buna bağlı olanlar günlük olarak değişir.
John

4

Durum için, bir görünüm katmanı kullanarak damlaları sınırlandırmayı tercih ediyorum:

  1. "_New" ile eklenmiş materyalize edilmiş görünümün bir kopyasını oluşturun ve ayrıca performans için "WITH NO DATA" ifadesini kullanın, herhangi bir endeksin sonek ile de oluşturulduğundan emin olun ve DROP ...
  2. Soyutlama katmanını sağlamak için yeni materyalize bakış üzerine bir görünüm oluşturun, böylece sadece bir yerde değiştirmem gerekiyor
  3. Mevcut bağımlılıkların yerine yeni görünüme bakacak şekilde DEĞİŞTİRME (önceden gerekirse verilerin yenilenmesi)
  4. Şimdi hiçbir bağımlılığı olmamalıdır orijinal maddi görünümü ve endeksleri bırakın
  5. GERÇEKLEŞTİRİLMİŞ Orijinal görünümü geri yüklemek için son eki düşürmek için maddileştirilmiş görünüm ve göstergeler

Örneğin.

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

Son iki adımda net değilim. 4, 5 ile biten bir cümle mi? adlandırılmış bazı görünümler ve görünümler ile hızlı bir örnek yapabilir misiniz?
kimbo305

kesilmiş cümle düzeltildi ve örnek eklendi
RuiDC

1

PgAdmin'de (sürüm 4.x), özellikler kutusundaki tanımı (nerede bir yan tümce ekledim) kolayca değiştirebilirim. Senin sorunun bu şekilde çözülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.