Czy można wykonać kopię zapasową i przywrócić zmaterializowany widok z jego danymi?

10

Mam kilka trudnych do obliczenia zmaterializowanych widoków, które chcę mieć możliwość tworzenia kopii zapasowych i przywracania przy użyciu rzeczywistych przechowywanych danych, a nie poprzez ponowne obliczanie.

Czy jest to możliwe w PostgreSQL 9.4?

(alternatywą jest tworzenie rzeczywistych tabel, ale trudniej je „odświeżyć”)

Ophir Yoktan
źródło
3
Możesz użyć copydo utworzenia zwykłego zrzutu danych (lub dowolnego innego narzędzia do eksportu). Nie jestem jednak pewien, jak go przywrócić.
a_horse_w_no_name
Możesz „przesłać” CSV z COPY do / ze zdalnego serwera za pomocą psql -c „\ COPY ....” -h baza danych some_IP, chociaż oczywiście musisz stworzyć strukturę tabeli w miejscu, do którego przywracasz.
John Powell,

Odpowiedzi:

8

Nie całkiem. Musisz pamiętać, że polecenie pg_dump tworzy proste instrukcje CREATE TABLE i INSERT itp. Tak więc podczas uruchamiania pg_restore po prostu uruchamiasz instrukcje CREATE i INSERT na serwerze, a wstawianie danych wymagałoby użycia polecenia „INSERT INTO MATERIALIZED VIEW”. Nie miałoby to sensu, ponieważ pobranie danych za pomocą skrótu zagroziłoby również „integralności” widoku - można wstawić nieprawidłowe dane w procesie ręcznego przywracania, których widok w przeciwnym razie nie zwróciłby. Wątpię więc, aby PostgreSQL kiedykolwiek obsługiwał ręczne przywracanie danych zmaterializowanych widoków bezpośrednio do bazy danych.

Jeśli potrzebujesz wykonać kopię zapasową rzeczywistych danych, zaleciłbym użycie tabeli zamiast zmaterializowanego widoku i uruchomienie zaplanowanej instrukcji DELETE FROM / INSERT INTO do tabeli.

Simo Kivistö
źródło