Можно ли сделать резервную копию и восстановить материализованное представление с его данными?

10

У меня есть некоторые сложные вычисления материализованных представлений, которые я хочу иметь возможность создавать резервные копии и восстанавливать, используя фактические сохраненные данные, а не путем повторного вычисления.

Возможно ли это в PostgreSQL 9.4?

(альтернатива заключается в создании реальных таблиц, но их сложнее «обновить»)

Офир Йоктан
источник
3
Вы можете использовать copyдля создания простого текстового дампа данных (или любую другую утилиту экспорта). Не уверен, как восстановить его, хотя.
a_horse_with_no_name
Вы можете «передать» CSV из COPY на / с удаленного сервера, используя базу данных psql -c «\ COPY ....» -h some_IP, хотя очевидно, что вы должны создать структуру таблицы в том месте, куда вы восстанавливаете.
Джон Пауэлл

Ответы:

8

На самом деле, нет. Вы должны помнить, что команда pg_dump создает простые операторы CREATE TABLE, INSERT и т. Д. Таким образом, эффективно при запуске pg_restore вы просто запускаете операторы CREATE и INSERT на сервере, и для вставки данных требуется команда «INSERT INTO MATERIALIZED VIEW». Это не имеет смысла, поскольку получение данных с помощью ярлыка также может поставить под угрозу «целостность» представления - вы можете вставить недопустимые данные в процесс ручного восстановления, который представление не вернет в противном случае. Поэтому я сомневаюсь, что PostgreSQL когда-либо будет поддерживать ручное восстановление данных материализованных представлений прямо в базу данных.

Если вам нужно сделать резервную копию фактических данных, я бы порекомендовал использовать таблицу вместо материализованного представления и запустить запланированные операторы DELETE FROM / INSERT INTO для таблицы.

Симо Кивистё
источник