Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql pg_dump忽略用-n指定的架构_Postgresql - Fatal编程技术网

Postgresql pg_dump忽略用-n指定的架构

Postgresql pg_dump忽略用-n指定的架构,postgresql,Postgresql,我正在使用pg_转储(PostgreSQL)9.2.4 我有一个具有两个不同模式的数据库,它们具有相同的表名 - mydatabase - schema_a - mytable - someothertable - schema_b - mytable - another table 我想将schema_a.mytable和schema_b.mytable从原始主机复制到新主机。我登录到新主机并键入: % psql

我正在使用pg_转储(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
我通过将最后一个命令转储到一个文件来确认它正在将搜索路径设置为schema_a,这导致了失败。如果我这样做的话,它似乎确实起作用了

%pg_dump-h orig_host-t schema_b.mytable mydatabase | psql mydatabase


但是-n开关不应该在这里工作吗?

看看生成的SQL。我相信你应该看到的是:

  • 模式a中的所有内容
  • 所有名为*.mytable的表
  • 也就是说,这些选项是相加的


    我猜其目的是模式S很可能依赖于一个或两个其他表,因此您可以将它们全部转储到一起。

    看看生成的SQL。我相信你应该看到的是:

  • 模式a中的所有内容
  • 所有名为*.mytable的表
  • 也就是说,这些选项是相加的

    我猜其目的是模式S很可能依赖于一个或两个其他表,因此您可以将它们一起转储。

    来自-

    当使用-t时,-n和-n开关无效,因为由-t选择的表将被转储,而不管这些开关是什么,非表对象也不会被转储

    搜索路径中可能有schema\u a,这就是第一个命令工作的原因。

    -

    当使用-t时,-n和-n开关无效,因为由-t选择的表将被转储,而不管这些开关是什么,非表对象也不会被转储

    搜索路径中可能有schema_a,这就是第一个命令工作的原因