#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 в любом случае скоро прекратит поддержку, так что это хорошая возможность для обновления.