![postgresql+ansible:如何创建表?](https://linux22.com/image/716552/postgresql%2Bansible%EF%BC%9A%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E8%A1%A8%EF%BC%9F.png)
我发现了很多如何使用 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