我正在尝试从PostgreSQL数据库创建备份,但收到以下错误:pg_dump:找不到匹配的模式
我以root身份登录并运行命令
pg_dump -f db.dump --format = plain --schema = existing_schema --username = userx --host = localhost databasename
输出\ dl:
List of relations Schema | Name | Type | Owner --------+-------------------------------------+-------+------- public | existing_schema | table | userx
答案 0 :(得分:7)
您可以尝试使用反斜杠和双引号,如here所述。
sudo -u postgres pg_dump -v Database_Name -t "\"Table_Name\""
答案 1 :(得分:2)
架构的名称为public
。
existing_schema
是架构公共中的表的名称。
您的pg_dump命令行不清楚您想要做什么。
如果要从架构 public
导出所有表,则需要指定:
--schema=public
如果您只想导出 表existing_schema
,那么您需要指定:
--table=existing_schema
答案 2 :(得分:0)
答案 3 :(得分:0)
对于未来的Google员工,在我的情况下,我的架构中包含点(“ my.schema”),而解决此问题的正确方法是转义:
pg_dump -U postgres -d mydatabase --schema \"my.schema\"
答案 4 :(得分:0)
在我的情况下,架构名称是大写的,无论我尝试什么(-n MYSCHEMA
、-n "MYSCHEMA"
、-n "\"MYSCHEMA\""
),它都不起作用,直到我将架构重命名为“myschema”在数据库中。然后我可以转储所有的 -n MYSCHEMA
、-n "MYSCHEMA"
和 -n "\"MYSCHEMA\""
。
看起来 pg_dump 内部使用小写,这意味着它没有引用命令行中给出的架构名称。
但是,当使用 -n """MYSCHEMA"""
调用 pg_dump 时它可以工作。
当添加表名时,选项 -n 不再适合我。如果 schema 和 table-name 包含大写字母,我使用这个:
pg_dump -f file.txt -t \"MySchema\".\"MyTable\"
。