PostgreSQL - pg_dump - 没有找到匹配的模式

5
我试图从PostgreSQL数据库创建备份,但遇到以下错误:pg_dump: No matching schemas were found。
我已经使用root用户登录,并运行以下命令: pg_dump -f db.dump --format=plain --schema=existing_schema --username=userx --host=localhost databasename 以下是我尝试的一些方法:
1. 我使用userx帐户登录psql并尝试了\dt命令,这给出了一个信息,说明名为existing_schema的模式是公共的。
2. 我检查了\l以查看databasename是否为数据库名称。
3. 密码正确,否则我将无法访问psql。
4. Localhost正确,通过运行进程进行了检查。我还尝试使用服务器的IP地址,但在这种情况下,pg_admin会报告有关主机地址的错误。
\dl的输出如下:
List of relations
Schema | Name | Type | Owner --------+-------------------------------------+-------+------- public | existing_schema | table | userx

schema with name existing_schema is public” 这句话没有意义。这个 schema 是以 public 命名的还是以 existing_schema 命名的? - user330315
这意味着,如果我输入命令\dt,我会得到以下结果: Schema | Name | Type | Owner ::: public | existing_schema | table | userx - stubgo
Owner public” 不是 \dt 命令会显示的内容。 - user330315
它显示模式:public | 名称:existing_schema | 类型:表格 | 所有者:userx。 模式、名称、类型和所有者是列标题,public、existing_schema、table、userx 是一行中的列值。 尝试将它们放在彼此下面,但在注释中无法工作,抱歉。 - stubgo
你能把输出结果(复制并粘贴)添加到你的问题中吗?(用<pre>标签括起来) - user330315
你为什么要以root身份运行这些程序,而不是以postgres身份运行呢? - Scott Marlowe
6个回答

13

您可以按照这里所述的方法,尝试使用反斜杠和双引号。

sudo -u postgres pg_dump -v Database_Name -t "\"Table_Name\""

6
schema 的名称是 publicexisting_schema 是 schema public 中的表名。
从您的 pg_dump 命令行不清楚您想做什么。
如果您想导出 schema public 的所有表格,您需要指定:
--schema=public
如果您只想导出表 existing_schema,则需要指定:
--table=existing_schema

3

对于未来的谷歌用户,在我的情况下,我的模式中有点号("my.schema"),正确的方式是使用转义字符:

pg_dump -U postgres -d mydatabase --schema \"my.schema\"

0
这对我有用 --schema "\"your_schema\""

0
在我的情况下,模式名称是大写的,无论我尝试什么(-n MYSCHEMA-n "MYSCHEMA"-n "\"MYSCHEMA\""),都不起作用,直到我将数据库中的模式重命名为"myschema"。然后我可以使用所有的-n MYSCHEMA-n "MYSCHEMA"-n "\"MYSCHEMA\""进行转储。
看起来pg_dump内部使用小写字母,这意味着它不会引用命令行中给出的模式名称。
但是,当使用-n """MYSCHEMA"""调用pg_dump时,它可以工作。
然而,当添加表名时,对于我来说,选项-n不再起作用。如果模式和表名包含大写字母,我使用以下命令:pg_dump -f file.txt -t \"MySchema\".\"MyTable\"

0
      \dn list out all the schema in the database 

如果你只想转储模式,

参考


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接