postgresql+ansible:如何创建表?

postgresql+ansible:如何创建表?

我发现了很多如何使用 ansible(Linux)管理 posgresql 的例子,但是,它们都包含最基本的内容(安装包、启动服务、创建数据库、创建用户),但不是最重要的内容:创建表。

我有一个包含数据库表的 SQL 文件,但我不知道如何在我的 ansible 角色中正确使用它作为输入。我希望我不需要使用模块shell来执行 SQL,因为据我所知,这在 ansible 世界中是不允许的(特别是因为我们可能需要先检查表是否已在之前的运行中创建)。

怎么做?有示例吗?谢谢

答案1

通常,应用程序的任务是管理给定数据库(模式)内的表,这就是为什么没有模块可以处理 Ansible 中的表。

你是正确的,你应该避免使用shell模块如果存在与该任务相关的本机模块。但如果没有这样的模块,shell则是一个不错的选择。

你可以查看这个答案https://stackoverflow.com/a/39117576/2795592了解如何创建在 postgres 内部创建某些内容的幂等脚本。

答案2

截至目前(2020 年 1 月),有一个可用的模块:

https://docs.ansible.com/ansible/latest/modules/postgresql_table_module.html
(但它依赖于您必须事先安装的 python 包“psycopg2”或替代包“psycopg2-binary”)

例如:

- name: Ensure db table for temp is present
  postgresql_table:
    db: myDatabase
    table: myTable
    columns:
    - someColumn TEXT COLLATE "C" NOT NULL
    - anotherColumn TEXT COLLATE "C" PRIMARY KEY
    - bla BYTEA PRIMARY KEY
    - CONSTRAINT  mykey PRIMARY KEY (anotherColumn, bla)

- name: Ensure temp-db-index is present
  postgresql_idx:
    db: myDatabase
    table: myTable
    columns: anotherColumn
    name: anotherColumn_idx

相关内容