Compartilhar via


Solução de problemas do PostgreSQL

Soluções para problemas comuns de conectividade, esquema e SSL do PostgreSQL no construtor de API de Dados.

Perguntas comuns

O que é o suporte ao PostgreSQL no DAB?

O construtor de API de Dados dá suporte ao PostgreSQL como um back-end de banco de dados relacional. O DAB se conecta usando o driver Npgsql e converte solicitações REST e GraphQL em consultas SQL. Há suporte para instâncias do PostgreSQL auto-hospedadas e serviços gerenciados, como o Banco de Dados do Azure para PostgreSQL.

Qual formato de cadeia de conexão o PostgreSQL usa?

O DAB usa uma cadeia de conexão no estilo ADO.NET para PostgreSQL. Uma cadeia de caracteres típica se parece com Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;. Defina a cadeia de conexão no campo data-source.connection-string de dab-config.json ou passe-a por meio de --connection-string em dab init.

O DAB dá suporte a esquemas postgreSQL?

Sim. O DAB dá suporte a esquemas não públicos. Referencie o esquema explicitamente no campo da source entidade usando o formato schemaname.tablename (por exemplo, sales.orders). O usuário de banco de dados configurado na cadeia de conexão deve ter USAGE privilégios no esquema e SELECT, INSERT, UPDATEou DELETE privilégios nas tabelas de destino.

Problemas comuns

Não é possível se conectar ao contêiner do PostgreSQL

Sintoma: O DAB falha ao iniciar com Failed to connect to localhost:5432 ou com um erro de rede semelhante.

Causa: A porta de contêiner postgreSQL não está mapeada ou o contêiner não está pronto para aceitar conexões.

Resolução: Confirme se o contêiner está em execução com docker ps e se a porta 5432 está mapeada para o host. Use Host=localhost;Port=5432 na cadeia de conexão. Se o contêiner tiver começado, permita alguns segundos para o PostgreSQL inicializar antes de iniciar o DAB.

Falha na autenticação de senha

Sintoma: Os logs do DAB mostram 28P01: password authentication failed for user.

Causa: O nome de usuário ou senha na cadeia de conexão está incorreto ou o usuário do PostgreSQL está configurado para um método de autenticação diferente, como peer ou ident.

Resolução: Verifique se as credenciais correspondem àqueles definidos quando a instância ou contêiner do PostgreSQL foi criada. Para contêineres, verifique as variáveis de ambiente POSTGRES_PASSWORD e POSTGRES_USER. Se estiver em execução localmente, confirme que o host de conexão permite a autenticação md5 ou scram-sha-256.

Esquema não encontrado quando a entidade faz referência a um esquema não público

Sintoma: O DAB retorna um relation "tablename" does not exist erro mesmo que a tabela exista no banco de dados.

Causa: O campo da source entidade omite o prefixo de esquema, portanto, o PostgreSQL pesquisa apenas o public esquema por padrão.

Resolução: Atualize o valor em sourcedab-config.json para incluir o prefixo de schema, por exemplo sales.orders. Confirme se o usuário do banco de dados tem USAGE no esquema executando GRANT USAGE ON SCHEMA sales TO myuser; em psql.

Erro de SSL obrigatório ao conectar-se ao Azure Database for PostgreSQL

Sintoma: As conexões com o Banco de Dados do Azure para PostgreSQL falham com SSL connection is required.

Causa: O Banco de Dados do Azure para PostgreSQL impõe o SSL por padrão. Conexões sem SSL são rejeitadas.

Resolução: Acrescente Ssl Mode=Require; à cadeia de conexão. Para validação completa do certificado, também defina Trust Server Certificate=false e forneça o caminho do certificado de AC do servidor por meio de Root Certificate=path/to/ca.pem. Baixe o pacote de certificados do portal do Azure nas configurações de Rede do servidor.

Não há suporte para procedimentos armazenados

Sintoma: A configuração de um procedimento ou função armazenada do PostgreSQL como uma origem de entidade falha ou a entidade não se comporta conforme o esperado.

Causa: Atualmente, o Construtor de API de Dados não dá suporte a procedimentos armazenados para PostgreSQL. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1023.

Resolução: Use uma tabela ou visualização como a origem da entidade. Acompanhe a issue no GitHub para obter atualizações sobre a adição do suporte a procedimentos armazenados do PostgreSQL.

A política de banco de dados não é imposta para operações de criação

Sintoma: Uma mutação de criação ou solicitação POST é bem-sucedida mesmo quando uma política de banco de dados deve restringir a operação.

Causa: O suporte à política de banco de dados para criar ações no PostgreSQL ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1334.

Resolução: Use permissões baseadas em função para restringir o acesso de criação até que o suporte à política de banco de dados para PostgreSQL Create esteja disponível.

A política de banco de dados não é imposta para operações PUT e PATCH

Sintoma: Uma solicitação PUT ou PATCH em uma entidade PostgreSQL é bem-sucedida mesmo quando uma política de banco de dados deve restringi-la.

Causa: O suporte à política de banco de dados para operações PUT e PATCH no PostgreSQL ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1372.

Resolução: Use permissões baseadas em função para restringir o acesso de atualização até que o suporte à política de banco de dados para operações de atualização do PostgreSQL esteja disponível.

Não há suporte para autenticação On-Behalf-Of (OBO)

Sintoma: A configuração da autenticação on-Behalf-Of (OBO) para uma instância do DAB apoiada pelo PostgreSQL falha ou o token não é encaminhado para o banco de dados conforme o esperado.

Causa: Atualmente, a autenticação OBO só tem suporte para SQL Server e SQL do Azure. O suporte para PostgreSQL, MySQL e Azure Cosmos DB ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 3159.

Resolução: Use um método de autenticação com suporte, como credenciais de cadeia de conexão ou identidade gerenciada para PostgreSQL. Siga o tópico no GitHub para atualizações sobre quando o suporte a OBO será expandido para bancos de dados que não utilizam o SQL Server.