Могу ли я предотвратить удаление общедоступной схемы с помощью pg_dump?

Я выполняю команду pg_dump следующим образом:

/Library/PostgreSQL/8.4/bin/pg_dump --host localhost --port 5432 --username xxx --format plain --clean --inserts --verbose --file /Users/xxx/documents/output/SYSTEM_admin_20131203101809.sql --exclude-table public.dbmirror_mirroredtransaction --exclude-table public.dbmirror_mirrorhost --exclude-table public.dbmirror_pending --exclude-table public.dbmirror_pendingdata --exclude-table public.mdflog --exclude-table public.fcpersistentstore --exclude-table public.backup_restore --exclude-table public.mdflogeventcode testdb

Проблема, с которой я столкнулся, заключается в том, что в созданном простом файле sql он добавляет команду, чтобы попытаться отбросить всю схему PUBLIC, как показано в этом фрагменте:

...
DROP FUNCTION public.f_updateeventlog();
DROP FUNCTION public.f_updateadmindata();
DROP PROCEDURAL LANGUAGE plpgsql;
DROP SCHEMA public;

CREATE SCHEMA public;
ALTER SCHEMA public OWNER TO postgres;
COMMENT ON SCHEMA public IS 'standard public schema';
...

Я ДЕЙСТВИТЕЛЬНО хочу отбросить все другие объекты, которые я не исключил в параметрах exclude-tables, которые я предоставил, но я НЕ хочу, чтобы они удаляли схему.

Я попытался добавить схему в качестве параметра exclude-table, но это не сработало.

Я использую Postgresql 8.4 для pg_dump.

РЕДАКТИРОВАТЬ: Я хотел обновить этот вопрос и сказать, что я считаю, что невозможно получить pg_dump, чтобы исключить общедоступную команду DROP / CREATE в простом формате. Я считаю, что вам нужно использовать настраиваемый формат, а затем pg_restore, чтобы этого не произошло. Поскольку я использую psql для восстановления и pg_dump в простом формате, я просто удаляю ненужные мне команды из файла sql после его автоматического создания в рамках создаваемого мной процесса Java, и я могу обойти это. Я оставляю вопрос на случай, если кто-то найдет способ это сделать.


person Graham    schedule 03.12.2013    source источник


Ответы (1)


Я думаю, что лучше всего постобработать дамп после того, как он был сделан. Вы можете сделать это с помощью grep и т.п. или просто выполнить поиск и удалить из дампа после того, как он был создан.

Дело в том, что вы используете параметр --clean, который удаляет восстановленные объекты базы данных. Нет готового способа указать pg_dump удалить только некоторые восстановленные объекты базы данных, что, вероятно, хорошо.

person Chris Travers    schedule 21.12.2013