Могу ли я остановить удаление схемы" Public " с помощью 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-файл, который создается, он добавляет команду, чтобы попытаться удалить всю открытую схему, как показано в этом фрагменте:

...
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, но это не сработало.

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

EDIT: я хотел обновить этот вопрос и сказать, что я считаю, что невозможно получить pg_dump, чтобы исключить команду DROP / CREATE public в обычном формате. Я считаю, что вы должны использовать пользовательский формат, а затем pg_restore, чтобы предотвратить это. Поскольку я использую psql для восстановления и pg_dump с простым форматом, я просто удаляю команды, которые я не хочу из файла sql после его автоматического создания в рамках процесса Java. я творю, и я могу обойти это. Я оставляю этот вопрос на тот случай, если кто-то найдет способ сделать это.

1 2

1 ответ:

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

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