pg_dump 不支持 -n

Geo*_*lva 4 postgresql backup pg-dump

我正在使用 pg_dump(9.2 数据库)来提取一个模式并将其加载到另一个数据库(9.4)中。

好吧,这是命令:

pg_dump -f file.sql -F plain --inserts -n 模式数据库

好的。我的命令完成得非常好,但是,它并没有将所有内容转储到名为 schema 的模式(在上面的示例中)。它将所有内容加载到公共环境中。

编辑

为了使问题更清楚:

转储工作正常。经过检查,它正在将 my 转储schema.tablepublic.table。我希望将其恢复到架构,而不是公开的。

有什么解决这个问题的建议吗?

谢谢

Dan*_*ité 5

当使用上述命令转储模式时,作为 postgres 用户:

pg_dump -f file.sql -F plain --inserts -n schemaname database
Run Code Online (Sandbox Code Playgroud)

它生成一个文件,其基本结构如下:

-- various SET commands
CREATE SCHEMA schemaname;

ALTER SCHEMA schemaname OWNER TO ownername;

SET search_path = schemaname, pg_catalog;

CREATE TABLE tablename(...) ...

ALTER TABLE schemaname.tablename OWNER TO ownername;

COPY tablename (columns...) FROM stdin;
data...
\.
Run Code Online (Sandbox Code Playgroud)

设置为新创建的模式这一事实search_path意味着后面的CREATE TABLECOPY语句将发生在该模式中,而不是该public模式中。

或者SET search_path必须失败,即使上面的脚本中的模式创建失败,这种情况也不应该发生。如果schemaname不存在,则尝试的下一个模式将是pg_catalog并且CREATE TABLE拒绝写入其中,之后搜索路径中没有下一个模式,特别是不存在public

很难想象什么错误会导致上述脚本最终在架构中创建和填充任何内容public