Partilhar via


plug-in postgresql_request

O postgresql_request plug-in envia uma consulta SQL para um ponto final de rede do PostgreSQL Server e devolve o primeiro conjunto de linhas nos resultados. A consulta pode devolver mais do que um conjunto de linhas, mas apenas o primeiro conjunto de linhas é disponibilizado para o resto da consulta Kusto.

O plug-in é invocado com o evaluate operador .

Importante

O postgresql_request plug-in está desativado por predefinição. Para ativar o plug-in, execute o .enable plugin postgresql_request comando . Para ver que plug-ins estão ativados, utilize .show plugin comandos de gestão.

Syntax

evaluatepostgresql_request(ConnectionString,SqlQuery [,SqlParameters] ) [:OutputSchema]

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
ConnectionString string ✔️ O cadeia de ligação que aponta para o ponto final de rede do Servidor PostgreSQL. Veja a autenticação e como especificar o ponto final de rede.
SqlQuery string ✔️ A consulta que vai ser executada no ponto final do SQL. Tem de devolver um ou mais conjuntos de linhas. Apenas o primeiro conjunto é disponibilizado para o resto da consulta.
SqlParameters dynamic Um objeto de conjunto de propriedades que contém pares chave-valor para transmitir como parâmetros juntamente com a consulta.
OutputSchema Os nomes e tipos das colunas esperadas da saída do postgresql_request plug-in.

Sintaxe: (ColumnName:ColumnType [, ...] )

Nota

  • Especificar o OutputSchema é altamente recomendado, uma vez que permite que o plug-in seja utilizado em cenários que, de outra forma, não funcionarão sem ele, como uma consulta entre clusters. O OutputSchema também pode ativar várias otimizações de consultas.
  • É gerado um erro se o esquema de tempo de execução do primeiro conjunto de linhas devolvido pelo ponto final de rede SQL não corresponder ao esquema OutputSchema .

Autenticação e autorização

Para autorizar um ponto final de rede do Servidor PostgreSQL, tem de especificar as informações de autorização no cadeia de ligação. O método de autorização suportado é através do nome de utilizador e da palavra-passe.

Definir política de nota de aviso

O plug-in faz chamadas para a base de dados PostgreSQL. Confirme que a política de nota de aviso do cluster ativa as chamadas do tipo postgresql para o PostgreSqlDbUri de destino.

O exemplo seguinte mostra como definir a política de nota de aviso para bases de dados PostgreSQL. Recomendamos que restrinja a política de nota de aviso a pontos finais específicos (my_endpoint1, my_endpoint2).

[
  {
    "CalloutType": "postgresql",
    "CalloutUriRegex": "my_endpoint1\\.postgres\\.database\\.azure\\.com",
    "CanCall": true
  },
  {
    "CalloutType": "postgresql",
    "CalloutUriRegex": "my_endpoint2\\.postgres\\.database\\.azure\\.com",
    "CanCall": true
  }
]

O exemplo seguinte mostra um .alter callout policy comando para postgresqlCalloutType:

.alter cluster policy callout @'[{"CalloutType": "postgresql", "CalloutUriRegex": "\\.postgresql\\.database\\.azure\\.com", "CanCall": true}]'

Autenticação de nome de utilizador e palavra-passe

O postgresql_request plug-in só suporta a autenticação de nome de utilizador e palavra-passe no ponto final do servidor PostgreSQL e não se integra na autenticação Microsoft Entra.

O nome de utilizador e a palavra-passe são fornecidos como parte da cadeia de ligações com os seguintes parâmetros:

User ID=...; Password=...;

Aviso

As informações confidenciais ou guardadas devem ser ocultadas de cadeias de ligação e consultas para que sejam omitidas de qualquer rastreio do Kusto. Para obter mais informações, veja literais de cadeias ocultas.

Encriptação e validação do servidor

Para segurança, SslMode é definido incondicionalmente como Required ao ligar a um ponto final de rede do servidor PostgreSQL. Como resultado, o servidor tem de ser configurado com um certificado de servidor SSL/TLS válido.

Especificar o ponto final de rede

Especifique o ponto final de rede do PostgreSQL como parte do cadeia de ligação.

Sintaxe:

Host=FQDN [Port=Porta]

Em que:

  • FQDN é o nome de domínio completamente qualificado do ponto final.
  • A porta é a porta TCP do ponto final.

Exemplos

Consulta SQL para a BD PostgreSQL do Azure

O exemplo seguinte envia uma consulta SQL para uma base de dados PostgreSQL do Azure. Obtém todos os registos de public."Table"e, em seguida, processa os resultados.

Nota

Este exemplo não deve ser considerado como uma recomendação para filtrar ou projetar dados desta forma. As consultas SQL devem ser construídas para devolver o menor conjunto de dados possível.

evaluate postgresql_request(
    'Host=contoso.postgres.database.azure.com; Port = 5432;'
    'Database=Fabrikam;'
    h'User Id=USERNAME;'
    h'Password=PASSWORD;',
    'select * from public."Table"') : (Id: int, Name: string)
| where Id > 0
| project Name

Consulta SQL para uma base de dados PostgreSQL do Azure com modificações

O exemplo seguinte envia uma consulta SQL para uma base de dados PostgreSQL do Azure a obter todos os registos de public."Table", ao acrescentar outra datetime coluna e, em seguida, processa os resultados no lado Data Explorer do Azure. Especifica um parâmetro SQL (@param0) a ser utilizado na consulta SQL.

evaluate postgresql_request(
    'Server=contoso.postgres.database.azure.com; Port = 5432;'
    'Database=Fabrikam;'
    h'User Id=USERNAME;'
    h'Password=PASSWORD;',
    'select *, @param0 as dt from public."Table"',
    dynamic({'param0': datetime(2020-01-01 16:47:26.7423305)})) : (Id: int, Name: string, dt: datetime)
| where Id > 0
| project Name

Consulta SQL para uma base de dados PostgreSQL do Azure sem um esquema de saída definido pela consulta

O exemplo seguinte envia uma consulta SQL para uma base de dados PostgreSQL do Azure sem um esquema de saída. Isto não é recomendado a menos que o esquema seja desconhecido, uma vez que pode afetar o desempenho da consulta

evaluate postgresql_request(
    'Host=contoso.postgres.database.azure.com; Port = 5432;'
    'Database=Fabrikam;'
    h'User Id=USERNAME;'
    h'Password=PASSWORD;',
    'select * from public."Table"')
| where Id > 0
| project Name

Esta capacidade não é suportada no Azure Monitor.