我正在执行 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 整个 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';
...
我确实想删除我提供的排除表参数中未排除的所有其他对象,但我不希望它删除架构。
我尝试将架构添加为排除表参数,但这不起作用。
我正在为 pg_dump 使用 Postgresql 8.4。
编辑:我想更新这个问题并说我相信不可能让 pg_dump 以纯格式排除 DROP / CREATE 公共命令。我相信您必须使用自定义格式,然后使用 pg_restore 才能阻止这种情况发生。当我使用 psql 来恢复和使用纯格式的 pg_dump 时,我只是在作为我正在创建的 Java 进程的一部分自动创建的 sql 文件之后从 sql 文件中删除我不想要的命令,我可以解决这个问题。如果有人确实找到了这样做的方法,我会留下这个问题。