2013-12-03 1 views
2

Я делаю команду 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'; 
... 

Я нЕ хочу, чтобы удалить все другие объекты, я не исключенные в параметрах исключения-таблицы я представил, но я не хочу, чтобы это DROP схемы.

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

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

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

ответ

1

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

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