Problemen met PostgreSQL oplossen

Oplossingen voor veelvoorkomende problemen met PostgreSQL-connectiviteit, schema en SSL in Data API Builder.

Veelgestelde vragen

Wat is PostgreSQL-ondersteuning in DAB?

Data API Builder ondersteunt PostgreSQL als een relationele databaseback-end. DAB maakt verbinding met behulp van het Npgsql-stuurprogramma en vertaalt REST- en GraphQL-aanvragen in SQL-query's. Zowel zelf-hostende PostgreSQL-exemplaren als beheerde services, zoals Azure Database for PostgreSQL, worden ondersteund.

Welke verbindingsreeksindeling gebruikt PostgreSQL?

DAB maakt gebruik van een ADO. Net-stijl verbindingsreeks voor PostgreSQL. Een typische tekenreeks ziet er als Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword; uit. Stel de verbindingsreeks in het data-source.connection-string veld van dab-config.json of geef deze door in--connection-stringdab init.

Ondersteunt DAB PostgreSQL-schema's?

Ja. DAB ondersteunt niet-openbare schema's. Verwijs expliciet naar het schema in het veld van source de entiteit met behulp van de notatie schemaname.tablename (bijvoorbeeld sales.orders). De databasegebruiker die in de verbindingsreeks is geconfigureerd, moet bevoegdheden hebben USAGE voor het schema en SELECT, INSERTUPDATEof DELETE bevoegdheden voor de doeltabellen.

Veelvoorkomende problemen

Kan geen verbinding maken met PostgreSQL-container

Symptoom: DAB kan niet worden gestart met Failed to connect to localhost:5432 of een vergelijkbare netwerkfout.

Oorzaak: De PostgreSQL-containerpoort is niet toegewezen of de container is niet gereed om verbindingen te accepteren.

Resolutie: Controleer of de container draait met docker ps en dat poort 5432 is toegewezen aan de host. Gebruik Host=localhost;Port=5432 in de verbindingsreeks. Als de container net is gestart, moet u een paar seconden toestaan dat PostgreSQL initialiseert voordat u DAB start.

Wachtwoordverificatie is mislukt

Symptoom: DAB-logboeken worden weergegeven 28P01: password authentication failed for user.

Oorzaak: De gebruikersnaam of het wachtwoord in de verbindingsreeks is onjuist of de PostgreSQL-gebruiker is geconfigureerd voor een andere verificatiemethode, zoals peer of ident.

Resolutie: Controleer of de referenties overeenkomen met de referenties die zijn ingesteld wanneer het PostgreSQL-exemplaar of de container is gemaakt. Controleer de POSTGRES_PASSWORD en POSTGRES_USER omgevingsvariabelen voor containers. Als het lokaal uitgevoerd wordt, controleer dan of pg_hba.confmd5- of scram-sha-256-authenticatie toestaat voor de verbindende host.

Het schema is niet gevonden wanneer een entiteit verwijst naar een niet-openbaar schema

Symptoom: DAB retourneert een relation "tablename" does not exist fout, ook al bestaat de tabel in de database.

Oorzaak: In het veld van source de entiteit wordt het schemavoorvoegsel weggelaten, zodat PostgreSQL standaard alleen in het public schema zoekt.

Resolutie: Werk de waarde van source in dab-config.json bij om het schema-voorvoegsel toe te voegen, bijvoorbeeld sales.orders. Controleer of de databasegebruiker de juiste rechten heeft in het schema met behulp van USAGE door GRANT USAGE ON SCHEMA sales TO myuser; in psql uit te voeren.

Fout: SSL vereist bij het verbinden met Azure Database for PostgreSQL

Symptoom: Verbindingen met Azure Database for PostgreSQL mislukken met SSL connection is required.

Oorzaak: Azure Database for PostgreSQL dwingt STANDAARD SSL af. Verbindingen zonder SSL worden geweigerd.

Resolutie: Toevoegen Ssl Mode=Require; aan de verbindingsreeks. Voor volledige certificaatvalidatie moet u ook Trust Server Certificate=false instellen en het CA-certificaatpad van de server opgeven via Root Certificate=path/to/ca.pem. Download de certificaatbundel vanuit Azure Portal onder de netwerkinstellingen van de server.

Opgeslagen procedures worden niet ondersteund

Symptoom: Het configureren van een postgreSQL-opgeslagen procedure of functie als een entiteitsbron mislukt of de entiteit gedraagt zich niet zoals verwacht.

Oorzaak: Data API Builder biedt momenteel geen ondersteuning voor opgeslagen procedures voor PostgreSQL. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1023.

Resolutie: Gebruik in plaats daarvan een tabel of weergave als entiteitsbron. Volg het GitHub-probleem voor updates wanneer ondersteuning voor opgeslagen PostgreSQL-procedures wordt toegevoegd.

Databasebeleid wordt niet afgedwongen voor create-bewerkingen.

Symptoom: Een create mutatie of POST-aanvraag slaagt zelfs wanneer een databasebeleid de bewerking moet beperken.

Oorzaak: Ondersteuning voor databasebeleid voor create actions in PostgreSQL is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1334.

Resolutie: Gebruik op rollen gebaseerde machtigingen om de toegang voor aanmaken te beperken totdat de ondersteuning voor databasebeleid voor PostgreSQL Create beschikbaar is.

Databasebeleid wordt niet afgedwongen voor PUT- en PATCH-bewerkingen

Symptoom: Een PUT- of PATCH-aanvraag voor een PostgreSQL-entiteit slaagt zelfs wanneer een databasebeleid dit moet beperken.

Oorzaak: Ondersteuning voor databasebeleid voor PUT- en PATCH-bewerkingen in PostgreSQL is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1372.

Resolutie: Gebruik op rollen gebaseerde machtigingen om de toegang tot updates te beperken totdat ondersteuning voor databasebeleid voor PostgreSQL-updatebewerkingen beschikbaar is.

Verificatie On-Behalf-Of (OBO) wordt niet ondersteund

Symptoom: Het configureren van on-Behalf-Of -verificatie (OBO) voor een DOOR PostgreSQL ondersteund DAB-exemplaar mislukt of het token wordt niet doorgestuurd naar de database zoals verwacht.

Oorzaak: OBO-verificatie wordt momenteel alleen ondersteund voor SQL Server en Azure SQL. Ondersteuning voor PostgreSQL, MySQL en Azure Cosmos DB is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #3159.

Resolutie: Gebruik een ondersteunde verificatiemethode, zoals referenties voor verbindingsreeksen of beheerde identiteit voor PostgreSQL. Volg het GitHub-probleem voor updates wanneer OBO-ondersteuning wordt uitgebreid naar niet-SQL Server-databases.