我正在执行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';
...
我想在我提供的exclude-tables参数中删除我未排除的所有其他对象,但我不想让它删除模式。
我尝试将架构添加为exclude-table参数,但这不起作用。
我正在使用Postgresql 8.4作为pg_dump。
编辑:我想更新这个问题并说我认为不可能让pg_dump以普通格式排除DROP / CREATE公共命令。我相信你必须使用自定义格式,然后使用pg_restore才能阻止这种情况发生。当我使用psql恢复和pg_dump使用普通格式时,我只是在我创建的Java进程的一部分自动创建之后从sql文件中删除了我不想要的命令,我可以解决这个问题。我要离开这个问题,万一有人确实找到了这样做的方法。
答案 0 :(得分:1)
我认为最好的办法是在转储完成后对其进行后处理。您可以使用grep
等执行此操作,或者只是在转储完成后从转储中搜索和删除。
事实是您正在使用--clean
选项删除已还原的数据库对象。没有一种方法可以告诉pg_dump只删除一些已恢复的数据库对象,这可能是一件好事。