Spec-Zone.ru › Ansible 2.11

community.postgresql.postgresql_query – Выполнение запросов PostgreSQL

Примечание

Этот плагин является частью коллекции community.postgresql (версия 1.1.1).

Для его установки используйте: ansible-galaxy collection install community.postgresql.

Для использования в книге задач укажите: community.postgresql.postgresql_query.

  • Обзор
  • Требования
  • Параметры
  • Примечания
  • См. также
  • Примеры
  • Возвращаемые значения

Обзор

  • Выполняет произвольные запросы PostgreSQL.
  • Может выполнять запросы из файлов скриптов SQL.
  • Не выполняет запросы к файлам резервных копий. Используйте community.postgresql.postgresql_db с state=restore для выполнения запросов к файлам, созданным утилитами pg_dump/pg_dumpall.

Требования

Ниже перечислены требования, необходимые на хосте, на котором выполняется этот модуль.

  • psycopg2

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
as_single_query
boolean
добавлен в 1.1.0 community.postgresql
    Варианты:
  • no
  • yes
Если yes, при чтении из файла path_to_script, выполняет все его содержимое в одном запросе.
Когда yes, возвращаемое значение query_all_results содержит только результат последнего оператора.
Изменение состояния определяется последним оператором в файле.
Используется только при указании path_to_script, в противном случае игнорируется.
Если установлено no, скрипт может содержать только запросы, разделенные точкой с запятой. (см. документацию опции path_to_script).
Значение по умолчанию no.
autocommit
boolean
    Варианты:
  • no ←
  • yes
Выполняется в режиме автосохранения, когда запрос не может быть выполнен внутри блока транзакции (например, VACUUM).
Взаимоисключительно с check_mode.
ca_cert
string
Указывает имя файла, содержащего сертификаты центра сертификации SSL.
Если файл существует, сертификат сервера будет проверен на подпись одним из этих центров.

псевдонимы: ssl_rootcert
db
string
Имя базы данных, к которой необходимо подключиться и выполнять запросы.

псевдонимы: login_db
encoding
string
добавлен в 0.2.0 community.postgresql
Устанавливает кодировку клиента для текущей сессии (например, UTF-8).
По умолчанию используется кодировка, определенная в базе данных.
login_host
string
Хост, на котором работает база данных.
login_password
string
Пароль для аутентификации.
login_unix_socket
string
Путь к сокету Unix для локальных подключений.
login_user
string
По умолчанию:
"postgres"
Имя пользователя для аутентификации.
named_args
dictionary
Словарь аргументов ключ-значение для передачи в запрос. Если значение является списком, оно будет преобразовано в массив PostgreSQL.
Взаимоисключительно с positional_args.
path_to_script
path
Путь к скрипту SQL на целевом хосте.
Если скрипт содержит несколько запросов, они должны быть разделены точкой с запятой.
Для выполнения скриптов, содержащих объекты с точкой с запятой (например, определения функций и процедур), используйте as_single_query=yes.
Для загрузки дампов или выполнения других сложных скриптов предпочтительнее использовать модуль community.postgresql.postgresql_db с state=restore.
Взаимоисключительно с query.
port
integer
По умолчанию:
5432
Порт базы данных для подключения.

псевдонимы: login_port
positional_args
list / elements=raw
Список значений, которые будут переданы как позиционные аргументы в запрос. Если значение является списком, оно будет преобразовано в массив PostgreSQL.
Взаимоисключительно с named_args.
query
string
SQL запрос для выполнения. Переменные могут быть экранированы с помощью синтаксиса psycopg2 http://initd.org/psycopg/docs/usage.html.
search_path
list / elements=string
добавлен в 1.0.0 community.postgresql
Список имен схем для поиска.
session_role
string
Переключиться на session_role после подключения. Указанный session_role должен быть ролью, членом которой является текущий login_user.
Проверка разрешений для команд SQL выполняется так, как будто session_role был тем, кто первоначально вошел в систему.
ssl_mode
string
    Варианты:
  • allow
  • disable
  • prefer ←
  • require
  • verify-ca
  • verify-full
Определяет, будет ли и с каким приоритетом устанавливаться безопасное SSL TCP/IP соединение с сервером.
См. https://www.postgresql.org/docs/current/static/libpq-ssl.html для получения дополнительной информации о режимах.
Значение по умолчанию prefer соответствует значению по умолчанию libpq.
trust_input
boolean
добавлен в 0.2.0 community.postgresql
    Варианты:
  • no
  • yes ←
Если no, проверьте, не является ли значение session_role потенциально опасным.
Использование no имеет смысл только в том случае, если возможны SQL-инъекции через session_role.

Примечания

Примечание

  • Поддерживает check_mode.
  • По умолчанию предполагается, что вы либо входите в систему как, либо используете sudo для входа в учетную запись postgres на хосте.
  • Чтобы избежать ошибки «Ошибка аутентификации клиента для пользователя postgres», используйте пользователя postgres в качестве become_user.
  • Этот модуль использует psycopg2, адаптер базы данных Python PostgreSQL. Вы должны убедиться, что psycopg2 установлен на хосте перед использованием этого модуля.
  • Если удаленный хост является сервером PostgreSQL (что является случаем по умолчанию), то PostgreSQL также должен быть установлен на удаленном хосте.
  • Для систем на базе Ubuntu установите пакеты postgresql, libpq-dev и python-psycopg2 на удаленном хосте перед использованием этого модуля.
  • Параметр ca_cert требует как минимум версии Postgres 8.4 и psycopg2 версии 2.4.3.

См. также

См. также

community.postgresql.postgresql_db

Официальная документация по модулю community.postgresql.postgresql_db.

Справочник по схемам PostgreSQL

Полный справочник по документации схемы PostgreSQL.

Примеры

- name: Simple select query to acme db
  community.postgresql.postgresql_query:
    db: acme
    query: SELECT version()

- name: Select query to db acme with positional arguments and non-default credentials
  community.postgresql.postgresql_query:
    db: acme
    login_user: django
    login_password: mysecretpass
    query: SELECT * FROM acme WHERE id = %s AND story = %s
    positional_args:
    - 1
    - test

- name: Select query to test_db with named_args
  community.postgresql.postgresql_query:
    db: test_db
    query: SELECT * FROM test WHERE id = %(id_val)s AND story = %(story_val)s
    named_args:
      id_val: 1
      story_val: test

- name: Insert query to test_table in db test_db
  community.postgresql.postgresql_query:
    db: test_db
    query: INSERT INTO test_table (id, story) VALUES (2, 'my_long_story')

# If your script contains semicolons as parts of separate objects
# like functions, procedures, and so on, use "as_single_query: yes"
- name: Run queries from SQL script using UTF-8 client encoding for session
  community.postgresql.postgresql_query:
    db: test_db
    path_to_script: /var/lib/pgsql/test.sql
    positional_args:
    - 1
    encoding: UTF-8

- name: Example of using autocommit parameter
  community.postgresql.postgresql_query:
    db: test_db
    query: VACUUM
    autocommit: yes

- name: >
    Insert data to the column of array type using positional_args.
    Note that we use quotes here, the same as for passing JSON, etc.
  community.postgresql.postgresql_query:
    query: INSERT INTO test_table (array_column) VALUES (%s)
    positional_args:
    - '{1,2,3}'

# Pass list and string vars as positional_args
- name: Set vars
  ansible.builtin.set_fact:
    my_list:
    - 1
    - 2
    - 3
    my_arr: '{1, 2, 3}'

- name: Select from test table by passing positional_args as arrays
  community.postgresql.postgresql_query:
    query: SELECT * FROM test_array_table WHERE arr_col1 = %s AND arr_col2 = %s
    positional_args:
    - '{{ my_list }}'
    - '{{ my_arr|string }}'

# Select from test table looking into app1 schema first, then,
# if the schema doesn't exist or the table hasn't been found there,
# try to find it in the schema public
- name: Select from test using search_path
  community.postgresql.postgresql_query:
    query: SELECT * FROM test_array_table
    search_path:
    - app1
    - public

# If you use a variable in positional_args / named_args that can
# be undefined and you wish to set it as NULL, the constructions like
# "{{ my_var if (my_var is defined) else none | default(none) }}"
# will not work as expected substituting an empty string instead of NULL.
# If possible, we suggest to use Ansible's DEFAULT_JINJA2_NATIVE configuration
# (https://docs.ansible.com/ansible/latest/reference_appendices/config.html#default-jinja2-native).
# Enabling it fixes this problem. If you cannot enable it, the following workaround
# can be used.
# You should precheck such a value and define it as NULL when undefined.
# For example:
- name: When undefined, set to NULL
  set_fact:
    my_var: NULL
  when: my_var is undefined

# Then:
- name: Insert a value using positional arguments
  community.postgresql.postgresql_query:
    query: INSERT INTO test_table (col1) VALUES (%s)
    positional_args:
    - '{{ my_var }}'

Возвращаемые значения

Общие возвращаемые значения описаны в этом разделе, следующие поля уникальны для данного модуля:

Ключ Возвращаемое значение Описание
query
строка
всегда
Выполненное запросы.
При чтении нескольких запросов из файла содержит только последний.

Пример:
SELECT * FROM bar
query_all_results
список / элементы=список
всегда
Список, содержащий результаты всех выполненных запросов (один подсписок для каждого запроса). Полезно при чтении нескольких запросов из файла.

Пример:
[[{'Столбец': 'Значение1'}, {'Столбец': 'Значение2'}], [{'Столбец': 'Значение1'}, {'Столбец': 'Значение2'}]]
query_list
список / элементы=строка
всегда
Список выполненных запросов. Полезно при чтении нескольких запросов из файла.

Пример:
['SELECT * FROM foo', 'SELECT * FROM bar']
query_result
список / элементы=словарь
всегда
Список словарей в формате столбец:значение, представляющих возвращенные строки.
При выполнении запросов из файла возвращает результат последнего запроса.

Пример:
[{'Столбец': 'Значение1'}, {'Столбец': 'Значение2'}]
rowcount
целое число
изменилось
Количество созданных или затронутых строк.
При использовании скрипта с несколькими запросами содержит общее количество созданных или затронутых строк.

Пример:
5
statusmessage
строка
всегда
Атрибут, содержащий сообщение, возвращённое командой.
При чтении нескольких запросов из файла содержит сообщение последнего из них.

Пример:
INSERT 0 1


Авторы

  • Филипп Аршамбо (@archf)
  • Андрей Клычков (@Andersson007)
  • Уильям Руэснел (@wrouesnel)

© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/postgresql/postgresql_query_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API