用例实际上是用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模块.谷歌也在沉默..目前的解决方案实际上也有效,导入失败时会出错,我可以忽略错误,但看到误报有点痛苦.