Compartir a través de


Solución de problemas de PostgreSQL

Soluciones para problemas comunes de conectividad, esquema y SSL de PostgreSQL en data API Builder.

Preguntas frecuentes

¿Qué es la compatibilidad con PostgreSQL en DAB?

Data API Builder admite PostgreSQL como back-end de base de datos relacional. DAB se conecta mediante el controlador Npgsql y convierte las solicitudes REST y GraphQL en consultas SQL. Se admiten instancias de PostgreSQL autohospedada y servicios administrados, como Azure Database for PostgreSQL.

¿Qué formato de cadena de conexión usa PostgreSQL?

DAB usa una cadena de conexión de estilo ADO.NET para PostgreSQL. Una cadena típica se ve como Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;. Establezca la cadena de conexión en el data-source.connection-string del campo de dab-config.json o pásela a través de --connection-string en dab init.

¿Admite DAB esquemas de PostgreSQL?

Sí. DAB admite esquemas no públicos. Haga referencia al esquema explícitamente en el campo de source la entidad mediante el formato schemaname.tablename (por ejemplo, sales.orders). El usuario de base de datos configurado en la cadena de conexión debe tener USAGE privilegios en el esquema y SELECT, INSERT, UPDATEo DELETE en las tablas de destino.

Problemas comunes

No se puede conectar al contenedor de PostgreSQL

Síntoma: DAB no se inicia con Failed to connect to localhost:5432 o un error de red similar.

Causa: El puerto del contenedor de PostgreSQL no está asignado o el contenedor no está listo para aceptar conexiones.

Resolución: Confirme que el contenedor se está ejecutando con docker ps y que el puerto 5432 está asignado al host. Use Host=localhost;Port=5432 en la cadena de conexión. Si el contenedor acaba de iniciarse, espere unos segundos para que PostgreSQL se inicialice antes de iniciar DAB.

Error de autenticación de contraseña

Síntoma: Los registros DAB muestran 28P01: password authentication failed for user.

Causa: El nombre de usuario o la contraseña de la cadena de conexión son incorrectos o el usuario de PostgreSQL está configurado para un método de autenticación diferente, como peer o ident.

Resolución: Compruebe que las credenciales coinciden con las establecidas cuando se creó la instancia o el contenedor de PostgreSQL. En el caso de los contenedores, compruebe las variables de entorno POSTGRES_PASSWORD y POSTGRES_USER. Si se ejecuta localmente, confirme que pg_hba.conf permite la autenticación md5 o scram-sha-256 al host de conexión.

Esquema no encontrado cuando la entidad hace referencia a un esquema no público

Síntoma: DAB devuelve un relation "tablename" does not exist error aunque la tabla exista en la base de datos.

Causa: El campo de la entidad omite el prefijo de source esquema, por lo que PostgreSQL busca solo el public esquema de forma predeterminada.

Resolución: Actualice el valor source en dab-config.json para incluir el prefijo de esquema, por ejemplo, sales.orders. Confirme que el usuario de la base de datos tiene USAGE en el esquema ejecutando GRANT USAGE ON SCHEMA sales TO myuser; en psql.

Error de SSL requerido al conectarse a Azure Database for PostgreSQL

Síntoma: Las conexiones a Azure Database for PostgreSQL producen un error con SSL connection is required.

Causa: Azure Database for PostgreSQL aplica SSL de forma predeterminada. Se rechazan las conexiones sin SSL.

Resolución: Anexe Ssl Mode=Require; a la cadena de conexión. Para la validación completa de certificados, establezca Trust Server Certificate=false y proporcione la ruta de acceso del certificado de la entidad certificadora del servidor a través de Root Certificate=path/to/ca.pem. Descargue la agrupación de certificados de Azure Portal en la configuración de redes del servidor.

No se admiten procedimientos almacenados

Síntoma: La configuración de un procedimiento almacenado o una función de PostgreSQL como origen de entidad produce un error o la entidad no se comporta según lo esperado.

Causa: Data API Builder no admite actualmente procedimientos almacenados para PostgreSQL. Se trata de una limitación conocida registrada en la incidencia de GitHub n.º 1023.

Resolución: En su lugar, use una tabla o vista como origen de entidad. Siga el problema de GitHub para obtener actualizaciones cuando se agregue compatibilidad con procedimientos almacenados de PostgreSQL.

La directiva de base de datos no se aplica para las operaciones de creación

Síntoma: Una mutación de creación o solicitud POST tiene éxito incluso cuando una directiva de base de datos debería restringir la operación.

Causa: La compatibilidad con directivas de base de datos para crear acciones en PostgreSQL aún no se ha implementado. Se trata de una limitación conocida que se documenta en el problema de GitHub n.º 1334.

Resolución: Use permisos basados en roles para restringir la creación de acceso hasta que la compatibilidad de directivas de base de datos con PostgreSQL Create esté disponible.

La directiva de base de datos no se aplica para las operaciones PUT y PATCH

Síntoma: Una solicitud PUT o PATCH en una entidad postgreSQL se realiza correctamente incluso cuando una directiva de base de datos debe restringirla.

Causa: La compatibilidad de directivas de base de datos con operaciones PUT y PATCH en PostgreSQL aún no se ha implementado. Se trata de una limitación conocida registrada en la incidencia de GitHub n.º 1372.

Resolución: Use permisos basados en roles para restringir el acceso de actualización hasta que la compatibilidad de directivas de base de datos con las operaciones de actualización de PostgreSQL esté disponible.

No se admite la autenticación en nombre de (OBO)

Síntoma: Se produce un error en la configuración de la autenticación On-Behalf-Of (OBO) para una instancia de DAB respaldada por PostgreSQL o el token no se reenvía correctamente a la base de datos como se esperaba.

Causa: Actualmente, la autenticación de OBO solo se admite para SQL Server y Azure SQL. Todavía no se ha implementado la compatibilidad con PostgreSQL, MySQL y Azure Cosmos DB. Se trata de una limitación conocida que se realiza en el problema de GitHub n.º 3159.

Resolución: Use un método de autenticación compatible, como credenciales de cadena de conexión o identidad administrada para PostgreSQL. Siga el problema de GitHub para obtener actualizaciones cuando la compatibilidad con OBO se expanda a bases de datos que no son de SQL Server.