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 |
| Если yes, при чтении из файла path_to_script, выполняет все его содержимое в одном запросе.Когда yes, возвращаемое значение query_all_results содержит только результат последнего оператора.Изменение состояния определяется последним оператором в файле. Используется только при указании path_to_script, в противном случае игнорируется. Если установлено no, скрипт может содержать только запросы, разделенные точкой с запятой. (см. документацию опции path_to_script).Значение по умолчанию no. |
| autocommit boolean |
| Выполняется в режиме автосохранения, когда запрос не может быть выполнен внутри блока транзакции (например, 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 |
| Определяет, будет ли и с каким приоритетом устанавливаться безопасное SSL TCP/IP соединение с сервером. См. https://www.postgresql.org/docs/current/static/libpq-ssl.html для получения дополнительной информации о режимах. Значение по умолчанию prefer соответствует значению по умолчанию libpq. |
| trust_input boolean добавлен в 0.2.0 community.postgresql |
| Если 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