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

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

发布时间:2020-12-13 16:18:29 所属栏目:百科 来源:网络整理
导读:用例实际上是用ansible自动化它.我只想在数据库完全为空(内部没有表)时导入数据库转储.当然总有一种方法可以执行sql语句,但这是最后的手段,我相信应该有更优雅的解决方案. 据我所知, pg_restore 手册不提供此选项. 以下是我计划用ansible执行此操作的方法:
用例实际上是用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 $4}'` 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

(编辑:李大同)

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

    推荐文章
      热点阅读