Назад | Перейти на главную страницу

Можно ли восстановить базу данных postgres с пользователем, не являющимся DBO?

Я изо всех сил пытаюсь найти подходящий метод резервного копирования / восстановления для моих баз данных postgres.

Мои требования таковы:

Итак, я попробовал следующие методы с переменным успехом:

  1. используйте "простой" pg_dump

    Он ломается при загрузке, потому что он не очищает существующие данные в объектах. Если я добавлю -c к pg_dump (отбросьте существующие объекты перед их созданием), в результирующих операторах SQL не будет учтена возможность того, что другая база данных может быть пустой или просто устаревшей с меньшим количеством объектов. Таким образом, операторы drop не работают.

    В случае неудачи этого метода я пошел в -Fc ...

  2. В настраиваемом формате pg_dump, похоже, имеет только один способ создания резервной копии. Это хорошо. Итак, варианты будут с pg_restore. Я начинаю с -C -c (воссоздать базу данных и объекты):

    Этот, кажется, ничего не делает, когда-либо запускается как пользователь postgres. Я получаю много ошибок типа "объект уже существует"

    Конечно, отказ от использования флагов drop / create приводит к еще большим сбоям.

    В противном случае я перешел к двухэтапному процессу:

  3. общедоступный каскад схемы удаления

    Этот работает с -O --role = non-admin-role с ошибкой одного единственного оператора. Тот, который занимается расширениями.

    Он НЕ работает при запуске postgres и с восстановлением права собственности на объект. Это просто не восстанавливает право собственности. Все в публичной схеме принадлежит postgres.

  4. удалить базу данных / создать базу данных / восстановить с помощью postgresql

    Один только этот, кажется, работает так, как задумано (очевидно, при запуске postgres), но он чрезвычайно агрессивен в том, что мне нужно сделать, чтобы получить простую резервную копию / восстановление. Кроме того, он не удовлетворяет принципу «восстановление должно выполняться непривилегированным пользователем».

Я на стр.11, если это имеет значение.

Итак, что я делаю не так? У вас есть простой пример резервного копирования / восстановления с двумя командами, который действительно работает? Я бы хотел услышать об этом

Вы сказать "резервное копирование / восстановление", но я считать вы имеете в виду "распространять копии".

если ты значит "восстановить", затем используйте стандарт инструменты в стандарт путь. Все остальное только увеличивает риск того, что что-то пойдет [серьезно] не так, когда вы меньше всего можете себе это позволить. Да, эти инструменты требуют повышенных разрешений. Это просто Природа Зверя.

Чтобы распространять копии Для баз данных "pg_dump -Fc" является наиболее переносимым вариантом, даже пересекающим границы операционной системы, но, вероятно, создает самый большой файл дампа (но "дисковое пространство дешевое").
Да, получатели этих файлов должны будут знать что они делают с собственными базами данных. Я считаю это хорошей вещью, потому что это дает им больше понимания ваш роль, как DBA.

Если вы намерены предоставить копии баз данных для других без у них есть разрешения на создание баз данных для себя, тогда вам просто нужно это сделать для них. Вы создаете базы данных, копируете и заполняете таблицы, вы предоставляете соответствующие разрешения для этих таблиц, а затем Oни возьми оттуда.