Я выполняю команду 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, и я могу обойти это. Я оставляю вопрос на случай, если кто-то найдет способ это сделать.