Zmaterializowane widoki umożliwiają fizyczne przechowywanie wyników złożonych zapytań i ich okresową aktualizację. Są więc przydatne w przypadkach, w których potrzebny jest szybki dostęp do danych do raportowania i analizy biznesowej. Oto jak stworzyć zmaterializowany widok w PostgreSQL.
Widok PostgreSQL a widok zmaterializowany
Widoki zmaterializowane są podobne do widoków PostgreSQL, które umożliwiają przechowywanie zapytań SQL w celu ich późniejszego wywołania. Jednak widok PostgreSQL pozwala na przechowywanie tylko zapytania SQL, a nie jego wyniku. Widoki zmaterializowane umożliwiają fizyczne przechowywanie wyników zapytania i okresowe ich aktualizowanie. W rezultacie widoki zmaterializowane są szybsze niż widoki PostgreSQL.
Przeczytaj bonus:Jak uzyskać ostatni rząd na grupę w PostgreSQL
Jak stworzyć zmaterializowany widok w PostgreSQL
Możesz utworzyć zmaterializowany widok w PostgreSQL za pomocą instrukcji CREATE MATERIALIZED VIEW, jak pokazano poniżej.
CREATE MATERIALIZED VIEW view_name AS query WITH [NO] DATA;
W powyższym oświadczeniu musisz wspomnieć o nazwa_widoku jak również zapytanie którego wynik chcesz zapisać w zmaterializowanym widoku.
Na koniec możesz również określić opcję Z DANYMI, jeśli chcesz załadować dane do widoku w momencie jego tworzenia. Jeśli wspomnisz BEZ DANYCH, widok zostanie oznaczony jako nieczytelny i nie będziesz mógł wyszukiwać danych z widoku, dopóki nie załadujesz do niego danych.
Przeczytaj bonus:Funkcja tworzenia PostgreSQL
Odświeżenie zmaterializowanego widoku PostgreSQL
Możesz załadować dane do widoku zmaterializowanego za pomocą instrukcji REFRESH MATERIALIZED VIEW, jak pokazano
REFRESH MATERIALIZED VIEW view_name
Możesz również użyć powyższej instrukcji, aby odświeżyć widok zmaterializowany.
Należy pamiętać, że instrukcja REFRESH MATERIALIZED VIEW blokuje dane zapytania, więc nie można uruchamiać zapytań względem niego. Możesz tego uniknąć, korzystając z opcji JEDNOCZEŚNIE
REFRESH MATERIALIZED VIEW CONCURRENTLY view_name
W takim przypadku PostgreSQL tworzy widok tymczasowy, porównuje go z oryginalnym i dokonuje niezbędnych wstawek, aktualizacji i usunięć. W rezultacie opcja JEDNOCZEŚNIE jest dostępna tylko dla zmaterializowanych widoków, które mają unikalny indeks.
Aby okresowo automatycznie odświeżać widok zmaterializowany, możesz uruchomić ODŚWIEŻ WIDOK ZMATERIALIZOWANY za pomocą automatycznego skryptu.
Przeczytaj bonus:Schemat tworzenia PostgreSQL
Usuń zmaterializowane widoki
Możesz usunąć zmaterializowane widoki za pomocą instrukcji DROP MATERIALIZED VIEW.
DROP MATERIALIZED VIEW view_name
Przykłady zmaterializowanych widoków
Przyjrzyjmy się kilku przykładom zmaterializowanych widoków.
Oto zapytanie umożliwiające utworzenie zmaterializowanego widoku o nazwie sample_view
postgres=# create materialized view sample_view as select * from sales with no data;
W powyższym zapytaniu wspomnieliśmy o opcji BEZ DANYCH, więc widok nie będzie zawierał żadnych danych i wyświetli błąd, gdy spróbujemy go zapytać.
postgres=# select * from sample_view; ERROR: materialized view "sample_view" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command.
Teraz odświeżymy widok, aby załadować do niego dane, a następnie uruchomimy powyższe zapytanie względem naszego widoku.
postgres=# refresh materialized view sample_view; REFRESH MATERIALIZED VIEW postgres=# select * from sample_view; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 250 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Jak widać powyżej, po ponownym uruchomieniu zapytania otrzymujemy wynik.
Mamy nadzieję, że teraz możesz łatwo utworzyć zmaterializowany widok swojej bazy danych.
Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!