PSQL запрещает «КОММЕНТИРОВАТЬ» дамп БД

#postgresql #postgresql-9.6 #pg-dump

Вопрос:

Мы переносим некоторые продукты, одним из шагов является перенос баз данных продуктов.

У меня есть шаги, чтобы

  • экспортируйте существующую базу данных pg_dump --no-owner --clean --blobs --no-privileges -U dbuser old_dbname -f bkpfile.sql
  • импортируйте дамп в другую базу данных psql -U dbuser2 new_dbname -f bkpfile.sql

Проблема в том, что старая база данных содержит инструкцию COMMENT ON DATABASE old_dbname IS 'Rxxxxx';

У нового пользователя БД не должно быть разрешений на старую базу данных, и imho в любом случае не стоит ссылаться на старое имя базы данных в дампе.

Есть ли способ создать полный дамп БД без COMMENT ON DATABASE инструкции?

Редактировать:

PostgreSQL 9.6 Шаги для воспроизведения:

 CREATE DATABASE testdb;
COMMENT ON DATABASE testdb IS 'some comment';
CREATE TABLE xx (id int);
 

а затем сбросьте базу данных, дамп содержит ссылку на имя базы COMMENT ON DATABASE testdb IS 'some comment'; данных, которое предотвращает импорт резервной копии в новую базу данных

 pg_dump --no-owner --clean --blobs --no-privileges testdb
 

Мы могли бы вручную удалить инструкцию comment или отфильтровать комментарий с помощью различных инструментов (grep), но ручное вмешательство или текстовая фильтрация поверх резервной копии могут привести к повреждению данных.

Комментарии:

1. Если вы не хотите, чтобы дамп ссылался на базу данных, вам придется опустить этот --create параметр.

2. @LaurenzAlbe Я не использовал никаких create вариантов.. И нам все равно нужно как — то создать схему.. или вы имеете в виду-комментарий является частью схемы?

3. О, извините, моя ошибка. Но без --create тебя никогда не попадешь COMMENT ON DATABASE на свалку.

4. Что это за версия PostgreSQL? Это обычный PostgreSQL или какой-то форк? Можете ли вы придумать простой репродуктор?

5. @LaurenzAlbe обновил вопрос версией БД и повторил шаги

Ответ №1:

Этот комментарий сбрасывается только в версиях PostgreSQL ниже v11. Смотрите эту запись в примечаниях к выпуску:

pg_dump и pg_restore, без --create , больше не сбрасывают/восстанавливают комментарии и метки безопасности на уровне базы данных; теперь они рассматриваются как свойства базы данных.

9.6 в любом случае скоро прекратит поддержку, так что это хорошая возможность для обновления.