为了使用pg_dump导出,我知道我需要做这样的事情来导出多个模式
举例:pg_dump -n user1 -n user2 -f backup.sql
但如果我有10模式,而不是使用"-n"N次是否有更好的方法来定义模式列表,比如在文本文件中,并以某种方式在pg_dump命令行中呈现?
感谢使用官方文档中出现的正则表达式模式
-n pattern --schema=pattern
只转储匹配模式的模式;这将选择模式本身及其包含的所有对象。通过写入多个-n
开关,可以选择多个模式。模式参数被解释根据psql的d
命令使用的相同规则作为模式(参见下面的模式),所以多个还可以通过在模式中写入通配符来选择模式。当使用通配符时,be如果需要,请注意引用模式,以防止shell扩展通配符;看例子下面。
转储所有名称以east或west开头,以gsm结尾的模式,不包括任何名称为包含单词test:
$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
相同,使用正则表达式符号来合并开关:
$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
或者使用shell脚本和包含模式名称的文本文件,逐行
#!/bin/bash
cat schemas.txt | while read schema || [[ -n $schema ]];
do
cmd="pg_dump -n '${schema}' postgres > ${schema}.sql"
printf '%sn' "$cmd"
eval "$cmd"
done
,其中postgres是您的数据库。另外,在一个转储文件
中提供所有选定模式的版本。#!/bin/bash
cat schemas.txt | (while read schema || [[ -n $schema ]];
do
params+="-n '${schema}' "
done
cmd="pg_dump $params postgres > some_schemas.sql"
printf '%sn' "$cmd"
eval "$cmd")