为了使用pg_dump进行导出,我意识到需要执行类似下面的操作来导出多个模式例如:pg_dump -n user1 -n user2 -f backup.sql但是如果我有10个模式,而不是使用"-n" n次,有没有更好的方法来定义模式列表,比如在文本文件中,然后以某种方式在pg_dump命令行中呈现?谢谢
pg_dump -n user1 -n user2 -f backup.sql
ulydmbyx1#
使用出现在官方文档中的正则表达式模式-n pattern --schema=pattern仅转储与模式匹配的架构;这将选择架构本身及其包含的所有对象。通过编写多个-n开关可以选择多个架构。pattern参数根据psql的\d命令使用的相同规则解释为模式(请参阅下面的模式),因此也可以通过在模式中写入通配符来选择多个架构。使用通配符时,如果需要的话,请小心地引用该模式,以防止shell扩展通配符;参见下面的实施例。要转储名称以east或west开头并以gsm结尾的所有方案(不包括名称中包含单词test的任何方案),请执行以下操作:
-n pattern --schema=pattern
-n
\d
$ 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 '%s\n' "$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 '%s\n' "$cmd" eval "$cmd")
1条答案
按热度按时间ulydmbyx1#
使用出现在官方文档中的正则表达式模式
-n pattern --schema=pattern
仅转储与模式匹配的架构;这将选择架构本身及其包含的所有对象。通过编写多个-n
开关可以选择多个架构。pattern参数根据psql的\d
命令使用的相同规则解释为模式(请参阅下面的模式),因此也可以通过在模式中写入通配符来选择多个架构。使用通配符时,如果需要的话,请小心地引用该模式,以防止shell扩展通配符;参见下面的实施例。要转储名称以east或west开头并以gsm结尾的所有方案(不包括名称中包含单词test的任何方案),请执行以下操作:
同样,使用正则表达式表示法合并开关:
或者使用shell脚本和包含模式名称的文本文件(一行一行
其中postgres是您的数据库。另外,一个转储文件中包含所有选定模式的版本