加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – PostgreSQL – 过滤数据库列表

发布时间:2020-12-15 21:06:40 所属栏目:安全 来源:网络整理
导读:我有这个脚本(每天备份数据库): #!/bin/bash# Location to place backups.backup_dir="/home/user/openerp/7.0/backup/"#String to append to the name of the backup filesbackup_date=`date +%Y-%m-%d`#Numbers of days you want to keep copie of your d
我有这个脚本(每天备份数据库):

#!/bin/bash
# Location to place backups.
backup_dir="/home/user/openerp/7.0/backup/"
#String to append to the name of the backup files
backup_date=`date +%Y-%m-%d`
#Numbers of days you want to keep copie of your databases
number_of_days=7
databases=`psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`
for i in $databases; do
  if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then
    echo Dumping $i to $backup_dir$i_$backup_date
    pg_dump -Fc $i > $backup_dir$i_$backup_date
  fi
done
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} ;

当我运行这个脚本时,它会开始正常进行数据库备份,但是当它像半数据库备份一样时,它只是挂起就像它正在做一些长备份而永远不会结束它.因此,有些时候我的某些数据库最终没有备份.

我认为这是因为它试图备份像template0和template1这样的数据库.我试着在文档中查看这个数据库过滤是如何工作的,但没有找到任何信息.

任何人都可以告诉我如何过滤除了template0,template1,postgres等数据库之外的所有数据库.如果有人可以提供链接到文档的链接也会很棒,如下所示:

`psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`

按要求输出:

demo
demo_empty1
dn1
dn2
dn3
da21
da22
nbb323
nd
nd2
pf12
postgres
rub_demo1
template0
template1
test
test3
testas_3

所以除了postgres,template0和template1之外的所有数据库

解决方法

我怀疑你对模板数据库的推测是不正确的. pg_dump几乎会立即转储它们.

更有可能的是,你的问题是pg_dump正在等待试图锁定其他人持有ACCESS EXCLUSIVE锁定的表.您必须查看哪个pg_dump进程被阻止,并检查该数据库上的pg_locks视图,以便更好地了解发生了什么.您的日志应告诉您哪个数据库停止转储,ps将告诉您哪个pg_dump正在运行. pg_stat_activity可以让你识别pg_dump进程的连接.

顺便说一句,你完全没有在这个脚本中做任何错误处理.如果备份失败,你将永远不会知道,除非你碰巧正在阅读日志并注意到pg_dump的一些有用的stderr输出.我个人建议使用pgbarman进行常规备份,但定期转储仍然是个好主意.

由于您可能希望排除template0和模板,即使它们很可能不是问题,您可以使用:

psql --tuples-only -P format=unaligned -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'";

而不是你的文字处理解决方案.当脚本使用psql时,你会发现–tuples-only和-P format = unaligned选项非常有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读