2013-06-10 2 views
4

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

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

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

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

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

+1

Я не думаю, что это возможно с помощью 'pg_dump' –

+0

Возможного решения - восстановить дамп, найти все коментарии и падение их, создавать новый дамп. Вы можете найти и удалить все комментарии с помощью динамического запроса SQL и метаданных. –

+0

Умный скрипт 'sed' или' perl' может это сделать, поскольку грамматика «КОММЕНТАРИЙ» довольно проста. Все, что вам нужно сделать, это убедиться, что вы правильно проверили строку, игнорируя двойные кавычки для таких случаев, как «COMMENT ON ...». «Все в порядке»; ' –

ответ

2

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

  1. самосвала и восстановление БД, как есть, или создать новую БД из старого с createdb -T или CREATE DATABASE WITH TEMPLATE

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

    Delete from pg_description; 
    
  3. дамп и восстановить эту базу данных. Это гарантирует, что у вас не будет никаких раздражающих зависимостей.
1

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

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

можно извлечь запись ТОС и редактировать его:

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

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

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

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

$ pg_restore -L /path/to/backup.toc -d <your database> /path/to/backup.dump 
Смежные вопросы