Я изо всех сил пытаюсь найти подходящий метод резервного копирования / восстановления для моих баз данных postgres.
Мои требования таковы:
Итак, я попробовал следующие методы с переменным успехом:
используйте "простой" pg_dump
Он ломается при загрузке, потому что он не очищает существующие данные в объектах. Если я добавлю -c к pg_dump (отбросьте существующие объекты перед их созданием), в результирующих операторах SQL не будет учтена возможность того, что другая база данных может быть пустой или просто устаревшей с меньшим количеством объектов. Таким образом, операторы drop не работают.
В случае неудачи этого метода я пошел в -Fc ...
В настраиваемом формате pg_dump, похоже, имеет только один способ создания резервной копии. Это хорошо. Итак, варианты будут с pg_restore. Я начинаю с -C -c (воссоздать базу данных и объекты):
Этот, кажется, ничего не делает, когда-либо запускается как пользователь postgres. Я получаю много ошибок типа "объект уже существует"
Конечно, отказ от использования флагов drop / create приводит к еще большим сбоям.
В противном случае я перешел к двухэтапному процессу:
общедоступный каскад схемы удаления
Этот работает с -O --role = non-admin-role с ошибкой одного единственного оператора. Тот, который занимается расширениями.
Он НЕ работает при запуске postgres и с восстановлением права собственности на объект. Это просто не восстанавливает право собственности. Все в публичной схеме принадлежит postgres.
удалить базу данных / создать базу данных / восстановить с помощью postgresql
Один только этот, кажется, работает так, как задумано (очевидно, при запуске postgres), но он чрезвычайно агрессивен в том, что мне нужно сделать, чтобы получить простую резервную копию / восстановление. Кроме того, он не удовлетворяет принципу «восстановление должно выполняться непривилегированным пользователем».
Я на стр.11, если это имеет значение.
Итак, что я делаю не так? У вас есть простой пример резервного копирования / восстановления с двумя командами, который действительно работает? Я бы хотел услышать об этом
Вы сказать "резервное копирование / восстановление", но я считать вы имеете в виду "распространять копии".
если ты значит "восстановить", затем используйте стандарт инструменты в стандарт путь. Все остальное только увеличивает риск того, что что-то пойдет [серьезно] не так, когда вы меньше всего можете себе это позволить. Да, эти инструменты требуют повышенных разрешений. Это просто Природа Зверя.
Чтобы распространять копии Для баз данных "pg_dump -Fc" является наиболее переносимым вариантом, даже пересекающим границы операционной системы, но, вероятно, создает самый большой файл дампа (но "дисковое пространство дешевое").
Да, получатели этих файлов должны будут знать что они делают с собственными базами данных. Я считаю это хорошей вещью, потому что это дает им больше понимания ваш роль, как DBA.
Если вы намерены предоставить копии баз данных для других без у них есть разрешения на создание баз данных для себя, тогда вам просто нужно это сделать для них. Вы создаете базы данных, копируете и заполняете таблицы, вы предоставляете соответствующие разрешения для этих таблиц, а затем Oни возьми оттуда.