【问题标题】:Can i stop the "Public" schema from being Dropped with pg_dump?我可以停止使用 pg_dump 删除“公共”模式吗?
【发布时间】:2013-12-19 06:01:03
【问题描述】:

我正在执行如下 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 架构,如以下 sn-p 所示:

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

【问题讨论】:

    标签: postgresql pg-dump


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-23
      • 2015-12-25
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2018-10-24
      • 2018-12-15
      • 1970-01-01
      相关资源
      最近更新 更多