【问题标题】:ansible cannot execute SQL CREATE DATABASE CREATE DATABASE cannot run inside a transaction blockansible 无法执行 SQL CREATE DATABASE CREATE DATABASE 无法在事务块内运行
【发布时间】:2020-12-23 02:28:06
【问题描述】:

CREATE DATABASE cannot run inside a transaction block 有几个条目给出了自动提交需要打开的答案。但是,它们没有引用我正在寻找的 ansible。

【问题讨论】:

    标签: database postgresql ansible transactions


    【解决方案1】:

    有一个specific postgresql_db module 将负责您的数据库创建(或删除/转储/恢复)并将管理idempotency 开箱即用。

    - name: Create database if needed
      postgresql_db:
        name: "{{ dbname }}"
        state: present
      become: yes
      become_user: postgres
    

    【讨论】:

    • 谢谢。我是 Ansible 的新手,发现自己在思考旧形式,例如直接查询数据库。感谢您指出这一点,这样我就可以了解更多使用 Ansible 的方法。
    【解决方案2】:

    我在anisble documentation 中发现有一种方法可以打开自动提交,例如:

    - name: create database if needed
      postgresql_query:
        autocommit: yes
        query: |
          CREATE DATABASE {{ dbname }}; 
      become: yes
      become_user: postgres
    

    我认为这对像我这样在寻求帮助时倾向于首先查看堆栈溢出的人有所帮助。注意:{{ dbname }} 是一个变量。你也可以使用文字。

    【讨论】:

    • 很高兴您找到了在其他情况下需要时如何打开自动提交。同时,这可能是the xy problem 的一个很好的例子。您真正的问题 IMO 是“如何从 ansible 创建 postgresql 数据库”。我已经给出了答案。旁注:这也应该告诉你,你应该在深入 SO 之前阅读文档。
    猜你喜欢
    • 2014-12-16
    • 2021-05-31
    • 2020-12-03
    • 2020-02-18
    • 2022-01-03
    • 1970-01-01
    • 2020-11-21
    • 2018-04-01
    • 2023-03-18
    相关资源
    最近更新 更多