4

我正在尝试从 PostgreSQL 数据库创建备份,但收到以下错误:pg_dump: No matching schemas were found

我以 root 身份登录并运行命令

pg_dump -f db.dump --format=plain --schema=existing_schema --username=userx --host=localhost 数据库名

  1. 我使用 userx 登录到 psql 并尝试了 \dt - 这给了我信息,名称为 existing_schema 的模式是公共的。
  2. 我检查了 \l 以查看 databasename 是数据库名称。
  3. 密码正确,否则无法访问psql。
  4. 本地主机是正确的,从正在运行的进程中检查。也尝试了服务器的 IP 地址,但在这种情况下,pg_admin 给出了有关主机地址的错误。

\dl 的输出:

 
                  关系列表

架构 | 姓名 | 类型 | 所有者
--------+-------------------------------------------------+--- ----+-------
 公共 | 现有架构 | 表| 用户x
4

5 回答 5

12

您可以尝试使用此处提到的反斜杠和双引号。

sudo -u postgres pg_dump -v Database_Name -t "\"Table_Name\""
于 2015-08-24T05:35:39.297 回答
3

架构的名称是public.

existing_schema是公共架构中的表名。

从您的 pg_dump 命令行中不清楚您想要做什么。

如果要从架构中导出所有表,则需要指定: public

--schema=公共

如果您只想导出表格,existing_schema需要指定:

--table=existing_schema
于 2012-09-26T10:55:14.153 回答
3

对于未来的谷歌用户,在我的例子中,我的模式有点(“my.schema”),解决这个问题的正确方法是转义:

pg_dump -U postgres -d mydatabase --schema \"my.schema\"
于 2019-02-07T11:52:06.163 回答
0
      \dn list out all the schema in the database 

如果您只想转储模式,

参考

于 2012-09-26T11:09:05.140 回答
0

在我的情况下,架构名称是大写的,无论我尝试什么 ( -n MYSCHEMA, -n "MYSCHEMA", -n "\"MYSCHEMA\""),它都不起作用,直到我在数据库中将架构重命名为“myschema”。然后我可以倾倒所有-n MYSCHEMA,-n "MYSCHEMA"-n "\"MYSCHEMA\"".

看起来 pg_dump 在内部使用小写字母,这意味着它没有引用命令行中给出的模式名称。

但是,当使用它调用 pg_dump 时-n """MYSCHEMA"""

但是,当添加表名时,选项 -n 对我来说不再起作用了。如果架构和表名包含大写字母,我使用这个:

pg_dump -f file.txt -t \"MySchema\".\"MyTable\".

于 2021-01-27T12:03:27.307 回答