我可以阻止“公共”模式被pg_dump删除吗?

时间:2013-12-03 09:01:43

标签: postgresql 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整个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文件中删除了我不想要的命令,我可以解决这个问题。我要离开这个问题,万一有人确实找到了这样做的方法。

1 个答案:

答案 0 :(得分:1)

我认为最好的办法是在转储完成后对其进行后处理。您可以使用grep等执行此操作,或者只是在转储完成后从转储中搜索和删除。

事实是您正在使用--clean选项删除已还原的数据库对象。没有一种方法可以告诉pg_dump只删除一些已恢复的数据库对象,这可能是一件好事。