Назад | Перейти на главную страницу

postgresql + ansible: как создавать таблицы?

Я нахожу множество примеров того, как управлять posgresql с помощью ansible (Linux), однако все они содержат самые основные вещи (установить пакет, запустить службу, создать базу данных, создать пользователя), но не самое главное: создать столы.

У меня есть файл SQL с таблицами для моей базы данных, но я не знаю, как правильно использовать его в качестве входных данных в моей доступной роли. Я надеюсь, мне не нужно использовать shell модуль, чтобы просто выполнить SQL, потому что, насколько я понимаю, это недопустимо в доступном мире (особенно потому, что нам может потребоваться способ сначала проверить, были ли таблицы уже созданы в предыдущем запуске).

Как это сделать? Есть образцы? Ура

Обычно задача приложения - управлять таблицами внутри заданной базы данных (схемы), поэтому модулей для работы с таблицами из Ansible нет.

Вы правы, что вам следует избегать shell модуль если родной модуль для рассматриваемой задачи существует. Но если такого модуля нет, shell это хороший выбор.

Вы можете проверить этот ответ https://stackoverflow.com/a/39117576/2795592 чтобы получить представление о том, как создать идемпотентный скрипт, который создает что-то внутри postgres.

На данный момент (01/2020) доступен модуль:

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