我正在使用pg_dump(PostgreSQL)9.2.4。
我有一个数据库,其中有两个不同的模式,它们具有相同的表名。
- mydatabase
- schema_a
- mytable
- someothertable
- schema_b
- mytable
- another table
我想将schema_a.mytable和schema_b.mytable从原始主机复制到新主机。我登录到新的主机并键入:
% psql -c "drop schema schema_a cascade" mydatabase
% psql -c "create schema schema_a" musicbrainz_db
% pg_dump -h orig_host -n schema_a -t mytable mydatabase | psql mydatabase
没问题,但是当我对schema_b执行同样的操作时,会出现冲突:
% psql -c "drop schema schema_b cascade" mydatabase
% psql -c "create schema schema_b" musicbrainz_db
% pg_dump -h orig_host -n schema_b -t mytable mydatabase | psql mydatabase
ERROR: relation "artist" already exists
我通过将最后一个命令转储到一个文件来确认它正在将搜索路径设置为架构,这将导致失败。如果我这样做的话
%pg_dump-h orig_host-t schema_b.mytable mydatabase | psql mydatabase
但是-n开关不应该在这里工作吗?
最佳答案
从manual-
使用-t时,-n和-n开关不起作用,因为由-t选择的表将被转储,而不考虑这些开关,并且不转储非表对象。
搜索路径中可能有schema_a,这就是第一个命令工作的原因。