我试图从PostgreSQL数据库创建备份,但收到以下错误:pg_dump:找不到匹配的架构
我以root用户身份登录并运行命令
pg_dump-f db.dump--format=plain--schema=existing_schema--username=userx--host=localhost数据库名称
- 我使用userx登录到psql并尝试\dt-这给了我信息,名称为existing_schema的架构是公共的
- 我检查了一下数据库名称是否就是数据库名称
- 密码是正确的,否则我无法访问psql
- Localhost是正确的,已从正在运行的进程中检查。也尝试了服务器的ip地址,但在本例中,pg_admin给出了有关主机地址的错误
\dl:的输出
关系列表架构|名称|类型|所有者--------+-------------------------------------+-------+-------public|existing_schema|table|userx
您可以尝试使用反斜杠和双引号,如这里所述。
sudo -u postgres pg_dump -v Database_Name -t ""Table_Name""
模式的名称为public
。
existing_schema
是架构公用中的表的名称。
从你的pg_dump命令行还不清楚你想做什么。
如果要从架构public
导出所有表,则需要指定:
--schema=public
如果只想导出表existing_schema
,则需要指定:
--table=existing_schema
对于未来的谷歌用户,在我的情况下,我的模式有点("my.schema"),解决这个问题的正确方法是转义:
pg_dump -U postgres -d mydatabase --schema "my.schema"
dn list out all the schema in the database
如果只想转储模式,
参考
在我的情况下,模式名称是大写的,无论我尝试了什么(-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"
。