postgresql – PgSQL – 如何在数据库完全空的情况下导入数据库转储?

postgresql – PgSQL – 如何在数据库完全空的情况下导入数据库转储?,第1张

概述用例实际上是用ansible自动化它.我只想在数据库完全为空(内部没有表)时导入数据库转储.当然总有一种方法可以执行sql语句,但这是最后的手段,我相信应该有更优雅的解决方案. 据我所知,pg_restore手册不提供此选项. 以下是我计划用ansible执行此 *** 作的方法: - name: db_restore | Receive latest DB backup shell: s3cmd 用例实际上是用ansible自动化它.我只想在数据库完全为空(内部没有表)时导入数据库转储.当然总有一种方法可以执行SQL语句,但这是最后的手段,我相信应该有更优雅的解决方案.

据我所知,pg_restore手册不提供此选项.

以下是我计划用ansible执行此 *** 作的方法:

- name: db_restore | Receive latest DB backup    shell: s3cmd --skip-existing get `s3cmd ls s3://{{ aws_bucket }}/ | grep sentry | tail -1 | awk '{print }'` sql.latest.tgz    args:        chdir: /root/        creates: sql.latest.tgz  - name: db_restore | Check if file exists    stat: path=/root/sql.latest.tgz    register: sql_latest  - name: db_restore | Restore latest DB backup if backup file found    shell: PGPASSWORD={{ dbpassword }} tar -xzOf /root/sentry*.tgz db.sql | psql -U{{ dbuser }} -h{{ pgsql_server }} --set ON_ERROR_Stop=on {{ dbname }}    when: sql_latest.stat.exists    ignore_errors: True

理想情况下,这应检查DB是否为空.为此目的不存在ansible模块.谷歌也在沉默..目前的解决方案实际上也有效,导入失败时会出错,我可以忽略错误,但看到误报有点痛苦.

要将数据库视为空,我们必须知道从创建的角度来看没有添加任何内容.由于postgres没有跟踪这一点(正如@Craig Ringer已经提到过的),我建议采用与ansible不同的方法.

所以,只需使用一个处理程序机制,如:

- name: Create zabbbix postgres DB  postgresql_db: name="{{zabbix_db_name}}"  notify:    - Init zabbix database
总结

以上是内存溢出为你收集整理的postgresql – PgSQL – 如何在数据库完全空的情况下导入数据库转储?全部内容,希望文章能够帮你解决postgresql – PgSQL – 如何在数据库完全空的情况下导入数据库转储?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1166476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存