2

我正在执行 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 文件中删除我不想要的命令,我可以解决这个问题。如果有人确实找到了这样做的方法,我会留下这个问题。

4

1 回答 1

1

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

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

于 2013-12-21T06:19:35.477 回答