pg_dump без комментариев к объектам?

Есть ли способ выполнить pg_dump и исключить COMMENT ON для таблиц/представлений и столбцов?

Я широко использую команду COMMENT ON для описания всех объектов и часто добавляю в них новые строки для более четкого описания, например:

COMMENT ON TABLE mytable1 IS 'MAIN TABLE...
NOTES:
1. ...
2. ...
3. ...
';

Однако, поскольку в дампе также есть новые строки, я не могу просто удалить комментарии с помощью команды grep -v 'COMMENT ON'.

Любой другой способ быстро удалить эти КОММЕНТАРИИ из дампа?


person Sébastien Clément    schedule 10.06.2013    source источник
comment
Я не думаю, что это возможно с pg_dump   -  person a_horse_with_no_name    schedule 10.06.2013
comment
Возможное решение - восстановить дамп, найти все комментарии и удалить их, создать новый дамп. Вы можете найти и удалить все комментарии с помощью динамического SQL и запроса метаданных.   -  person Ihor Romanchenko    schedule 10.06.2013
comment
Это может сделать более умный сценарий sed или perl, поскольку грамматика COMMENT ON довольно проста. Все, что вам нужно сделать, это убедиться, что вы правильно разобрали экранирование строки, игнорируя двойные кавычки для таких случаев, как COMMENT ON ... 'It''s alright';   -  person Craig Ringer    schedule 11.06.2013
comment
Спасибо, ребята, за советы.   -  person Sébastien Clément    schedule 11.06.2013


Ответы (3)


Насколько я знаю, ни pg_dump, ни pg_restore не имеют возможности удалить COMMENT. Но если вы используете двоичный формат дампа, например:

 $ pg_dump -Fc <your connection> -f /path/to/backup.dump

вы можете извлечь запись TOC и отредактировать ее:

 $ pg_restore -l -f /path/to/backup.toc /path/to/backup.dump

Приведенное выше извлечет файл TOC и сохранит его в /path/to/backup.toc, затем вы сможете найти каждую строку с записью COMMENT и удалить или прокомментировать ее. Если вы не используете странные имена для своих объектов, простая sed решит проблему, чтобы прокомментировать строки с COMMENTs, вы можете сделать это (точка с запятой начинает комментарий):

$ sed -i 's/^\(.* COMMENT .*\)/;\1/g' bar.toc

С этим новым файлом TOC теперь вы можете использовать pg_restore для восстановления дампа (с опцией -L):

$ pg_restore -L /path/to/backup.toc -d <your database> /path/to/backup.dump
person MatheusOl    schedule 07.10.2013
comment
Это создание TOC и восстановление с измененным TOC было действительно хорошим решением! Спасибо! Даже не нужно было использовать sed, так как оглавление можно было изменить через мой редактор. - person Arian Faurtosh; 10.04.2021

На самом деле я бы сделал это с двухэтапным дампом и восстановлением.

  1. Сделайте дамп и восстановите базу данных как есть или создайте новую базу данных из старой с помощью createdb -T или CREATE DATABASE WITH TEMPLATE.

  2. Выполните следующую команду

    Delete from pg_description;
    
  3. Сбросьте и восстановите эту базу данных. Это гарантирует, что у вас не будет раздражающих зависимостей.
person Chris Travers    schedule 07.10.2013

Используйте опцию --no-comments.

Пример:

$ pg_dump --no-comments [database] > dump.sql

Ссылки: https://www.postgresql.org/docs/12/app-pgdump.html

person Davide Muzzarelli    schedule 14.03.2020