PostgreSQL Query
Resumo
- Executa consultas PostgreSQL.
- Pode executar consultas de arquivos de script SQL.
- Não é executado em arquivos de backup. Use postgresql_db com state=restore para executar consultas em arquivos feitas pelos utilitários pg_dump/pg_dumpall.
Parâmetros
Parâmetro | Tipo | Escolhas | Valores padrão | Comentários |
|---|---|---|---|
as_single_query | boolean | Escolhas:
| Caso use 'yes', ao ler do arquivo path_to_script, executa todo o conteúdo em uma única consulta. Se 'yes', o valor de retorno query_all_results contém apenas o resultado da última instrução. Se o estado é relatado como alterado ou não é determinado pela última instrução do arquivo. Usado apenas quando path_to_script é especificado, caso contrário, ignorado. Se definido como 'no', o script pode conter apenas consultas separadas por ponto e vírgula. (consulte a documentação da opção path_to_script). O valor padrão é 'no'. |
autocommit | boolean | Escolhas:
| Execute no modo de confirmação automática quando a consulta não puder ser executada dentro de um bloco de transação (por exemplo, VACUUM). Mutuamente exclusivo com check_mode. |
db | string | | Nome do banco de dados ao qual se conectar e executar as consultas. aliases: login_db |
encoding | string | | Defina a codificação do cliente para a sessão atual (por exemplo, UTF-8). O padrão é a codificação definida pelo banco de dados. |
named_args | dictionary | | Dicionário de argumentos de valor-chave para passar para a consulta. Quando o valor for uma lista, ele será convertido para o array PostgreSQL. Mutuamente exclusivo com positional_args. |
path_to_script | path | | Caminho para um script SQL na máquina de destino. Se o script contiver várias consultas, elas devem ser separadas por ponto e vírgula. Para executar scripts que contenham objetos com ponto e vírgula (por exemplo, definições de função e procedimento), use as_single_query=yes. Para fazer upload de dumps ou para executar outros scripts complexos, a maneira preferível é usar o módulo postgresql_db com state=restore. Mutually exclusivo com query. |
positional_args | list | | Lista de valores a serem passados como argumentos posicionais para a consulta. Quando o valor for uma lista, ele será convertido para o array PostgreSQL. Mutuamente exclusivo com named_args. |
query | string | | Consulta SQL a ser executada. As variáveis podem ser escapadas com a sintaxe psycopg2 http://initd.org/psycopg/docs/usage.html. |
search_path | list | | Lista de nomes de esquema a serem examinados. |
session_role | string | | Alterna para session_role após conectar. O session_role especificado deve ser uma função da qual o login_user atual é membro. A verificação de permissões para comandos SQL é realizada como se o session_role fosse aquele que havia se logado originalmente. |
trust_input | boolean | Escolhas:
| Caso use 'no', verifica se um valor de session_role é potencialmente perigoso. Faz sentido usar no apenas quando as injeções de SQL via session_role são possíveis. |
Extende fragmentos da documentação do módulo PostgreSQL Base
Notas
- A autenticação padrão assume que você está fazendo login ou sudo na conta do postgres no host.
- Para evitar o erro “Peer authentication failed for user postgres”, use o usuário postgres como um become_user.
- Se o host remoto for o servidor PostgreSQL (que é o caso padrão), o PostgreSQL também deve ser instalado no host remoto.
- O parâmetro ca_cert requer pelo menos Postgres versão 8.4.
Exemplos
- name: Consulta de seleção simples para acme db
postgresql_query:
db: acme
query: SELECT version()
- name: Consulta select para db acme com argumentos posicionais e credenciais não padrão
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: Consulta select em test_db com named_args
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: Consulta Insert em test_table no banco de dados test_db
postgresql_query:
db: test_db
query: INSERT INTO test_table (id, story) VALUES (2, 'my_long_story')
# Se o seu script contiver ponto e vírgula como partes de objetos separados
# como funções, procedimentos e assim por diante, use "as_single_query: yes"
- name: Executa consultas de script SQL usando codificação de cliente UTF-8 para a sessão
postgresql_query:
db: test_db
path_to_script: /var/lib/pgsql/test.sql
positional_args:
- 1
encoding: UTF-8
- name: Exemplo de uso do parâmetro autocommit
postgresql_query:
db: test_db
query: VACUUM
autocommit: yes
- name: >
Insira dados na coluna do tipo array usando positional_args.
Observe que usamos aspas aqui, o mesmo que para passar JSON, etc.
postgresql_query:
query: INSERT INTO test_table (array_column) VALUES (%s)
positional_args:
- '{1,2,3}'
# Passar lista e vars de string como positional_args
- name: Set vars
ansible.builtin.set_fact:
my_list:
- 1
- 2
- 3
my_arr: '{1, 2, 3}'
- name: Selecione na tabela de teste passando positional_args como matrizes
postgresql_query:
query: SELECT * FROM test_array_table WHERE arr_col1 = %s AND arr_col2 = %s
positional_args:
- '{{ my_list }}'
- '{{ my_arr|string }}'
# Selecione na tabela de teste olhando para o schema app1 primeiro, então,
# se o schema não existe ou a tabela não foi encontrada lá,
# tente encontrá-lo no schema public
- name: Selecione a partir do teste usando search_path
postgresql_query:
query: SELECT * FROM test_array_table
search_path:
- app1
- public
# Se você usar uma variável em positional_args/named_args que pode
# ser indefinido e você deseja defini-lo como NULL, as construções como
# "{{my_var if (my_var is defined) else none | default (none)}}"
# não funcionará conforme o esperado substituindo uma string vazia em vez de NULL.
# Você deve verificar previamente esse valor e defini-lo como NULL quando indefinido.
# Por exemplo:
- nome: Quando indefinido, definido como NULL
set_fact:
my_var: NULL
when: my_var is undefined
# Então:
- name: Insira um valor usando argumentos posicionais
postgresql_query:
query: INSERT INTO test_table (col1) VALUES (%s)
positional_args:
- '{{ my_var }}'
Valores retornados
Chave | Tipo | Retornado quando | Descrição |
|---|---|---|---|
query | string | sempre | Consulta executada. Ao ler várias consultas de um arquivo, ele contém apenas a última. Exemplo: SELECT * FROM bar |
query_all_results | list | sempre | Lista contendo os resultados de todas as consultas executadas (uma sublista para cada consulta). Útil ao ler várias consultas de um arquivo. Exemplo: [[{'Column': 'Value1'}, {'Column': 'Value2'}], [{'Column': 'Value1'}, {'Column': 'Value2'}]] |
query_list | list | sempre | Lista de consultas executadas. Útil ao ler várias consultas de um arquivo. Exemplo: ['SELECT * FROM foo', 'SELECT * FROM bar'] |
query_result | list | sempre | Lista de dicionários em formato coluna:valor que representa as linhas retornadas. Ao executar consultas de um arquivo, retorna o resultado da última consulta. Exemplo: [{'Column': 'Value1'}, {'Column': 'Value2'}] |
rowcount | integer | Em caso de mudanças | Número de linhas produzidas ou afetadas. Ao usar um script com várias consultas, ele contém um número total de linhas produzidas ou afetadas. Exemplo: 5 |
statusmessage | string | sempre | Atributo que contém a mensagem retornada pelo comando. Ao ler várias consultas de um arquivo, contém uma mensagem da última. Exemplo: INSERT 0 1 |