Rozwiązywanie problemów z bazą danych PostgreSQL

Rozwiązania typowych problemów z łącznością, schematem i protokołem SSL bazy danych PostgreSQL w narzędziu Data API Builder.

Często zadawane pytania

Co to jest obsługa bazy danych PostgreSQL w języku DAB?

Narzędzie do tworzenia interfejsów API danych obsługuje PostgreSQL jako relacyjną bazę danych. DAB łączy się za pomocą sterownika Npgsql i konwertuje żądania REST oraz GraphQL na zapytania SQL. Obsługiwane są zarówno własne wystąpienia PostgreSQL, jak i usługi zarządzane, takie jak Azure Database for PostgreSQL.

Jakiego formatu parametrów połączenia używa postgreSQL?

DAB używa łańcucha połączenia w stylu ADO.NET dla PostgreSQL. Typowy ciąg wygląda następująco: Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;. Ustaw ciąg połączenia w polu data-source.connection-stringdab-config.json lub przekaż go za pośrednictwem --connection-string w dab init.

Czy język DAB obsługuje schematy PostgreSQL?

Tak. DAB obsługuje niepubliczne schematy. Odwołuj się do schematu jawnie w polu jednostki source przy użyciu formatu schemaname.tablename (na przykład sales.orders). Użytkownik bazy danych skonfigurowany w parametrach połączenia musi mieć USAGE uprawnienia do schematu oraz uprawnienia SELECT, INSERT, UPDATE lub DELETE do tabel docelowych.

Typowe problemy

Nie można nawiązać połączenia z kontenerem PostgreSQL

Symptom: Nie można uruchomić DAB z błędem sieci lub podobnym błędem.

Spowodować: Port kontenera PostgreSQL nie jest mapowany lub kontener nie jest gotowy do akceptowania połączeń.

Rozwiązanie: Upewnij się, że kontener jest uruchomiony z docker ps i że port 5432 jest mapowany na hosta. Użyj Host=localhost;Port=5432 w parametrach połączenia. Jeśli kontener został właśnie uruchomiony, poczekaj kilka sekund na zainicjowanie bazy danych PostgreSQL przed uruchomieniem języka DAB.

Uwierzytelnianie haseł nie powiodło się

Objaw: Dzienniki DAB pokazują 28P01: password authentication failed for user.

Spowodować: Nazwa użytkownika lub hasło w parametrach połączenia jest niepoprawne lub użytkownik PostgreSQL jest skonfigurowany dla innej metody uwierzytelniania, takiej jak peer lub ident.

Rozdzielczość: Sprawdź, czy poświadczenia są zgodne z tymi ustawionymi podczas tworzenia wystąpienia lub kontenera PostgreSQL. W przypadku kontenerów sprawdź zmienne środowiskowe POSTGRES_PASSWORD i POSTGRES_USER. W przypadku uruchamiania lokalnego upewnij się, że pg_hba.conf zezwala na uwierzytelnianie md5 lub scram-sha-256 dla połączonego hosta.

Nie można odnaleźć schematu, gdy jednostka odwołuje się do schematu innego niż publiczny

Objaw: DAB zwraca relation "tablename" does not exist błąd, mimo że tabela istnieje w bazie danych.

Spowodować: Pole jednostki source pomija prefiks schematu, więc postgreSQL domyślnie wyszukuje tylko public schemat.

Rozwiązanie: Zaktualizuj wartość w source, aby uwzględnić prefiks schematu, na przykład sales.orders. Upewnij się, że użytkownik bazy danych ma USAGE na schemacie, uruchamiając GRANT USAGE ON SCHEMA sales TO myuser; w psql.

Błąd wymagający używania SSL przy łączeniu się z bazą danych Azure Database for PostgreSQL

Objaw: Połączenia z Azure Database for PostgreSQL kończą się niepowodzeniem z SSL connection is required.

Spowodować: Usługa Azure Database for PostgreSQL domyślnie wymusza protokół SSL. Połączenia bez protokołu SSL są odrzucane.

Rozdzielczość: Dołącz Ssl Mode=Require; do parametrów połączenia. Aby uzyskać pełną weryfikację certyfikatu, ustaw Trust Server Certificate=false i podaj ścieżkę certyfikatu urzędu certyfikacji serwera za pomocą Root Certificate=path/to/ca.pem. Pobierz pakiet certyfikatów z witryny Azure Portal w obszarze ustawień sieci serwera.

Procedury składowane nie są obsługiwane

Symptom: Konfigurowanie procedury składowanej lub funkcji PostgreSQL jako źródła jednostki kończy się niepowodzeniem lub jednostka nie działa zgodnie z oczekiwaniami.

Przyczyna: Data API Builder nie obsługuje obecnie procedur składowanych dla bazy danych PostgreSQL. Jest to znane ograniczenie śledzone w problemie usługi GitHub #1023.

Rozdzielczość: Zamiast tego użyj tabeli lub widoku jako źródła jednostki. Śledź zgłoszenie na GitHubie, aby uzyskać aktualizacje dotyczące dodawania obsługi procedur składowanych PostgreSQL.

Zasady bazy danych nie są wymuszane dla operacji tworzenia

Objawem: Operacja tworzenia mutacji lub żądania POST kończy się powodzeniem nawet wtedy, gdy zasady bazy danych powinny ograniczyć operację.

Przyczyna: Polityka bazy danych dla działań tworzenia w PostgreSQL jeszcze nie została wdrożona. Jest to znane ograniczenie śledzone w problemie z usługą GitHub #1334.

Rozdzielczość: Użyj uprawnień opartych na rolach, aby ograniczyć możliwość tworzenia dostępu do momentu udostępnienia obsługi zasad dla funkcji tworzenia w PostgreSQL.

Zasady bazy danych nie są wymuszane dla operacji PUT i PATCH

Objaw: Żądanie PUT lub PATCH jednostki PostgreSQL zakończy się sukcesem nawet wtedy, gdy polityka bazodanowa powinna je ograniczyć.

Przyczyna: Obsługa polityk bazy danych dla operacji PUT i PATCH w PostgreSQL nie została jeszcze zaimplementowana. Jest to znane ograniczenie śledzone w problemie z usługą GitHub #1372.

Rozdzielczość: Użyj uprawnień opartych na rolach, aby ograniczyć dostęp do aktualizacji, dopóki nie będzie dostępna obsługa zasad bazy danych dla operacji aktualizacji PostgreSQL.

Uwierzytelnianie w imieniu (OBO) nie jest obsługiwane

Objawem: Konfigurowanie uwierzytelniania On-Behalf-Of (OBO) dla instancji DAB opartej na bazie danych PostgreSQL kończy się niepowodzeniem lub token nie jest przekazywany do bazy danych zgodnie z oczekiwaniami.

Przyczyna: Uwierzytelnianie OBO jest obecnie obsługiwane tylko dla SQL Server i Azure SQL. Obsługa baz danych PostgreSQL, MySQL i Azure Cosmos DB nie została jeszcze zaimplementowana. Jest to znane ograniczenie śledzone w problemie usługi GitHub #3159.

Rozdzielczość: Użyj obsługiwanej metody uwierzytelniania, takiej jak poświadczenia parametrów połączenia lub tożsamość zarządzana dla bazy danych PostgreSQL. Śledź problem na GitHub, aby uzyskać informacje na temat aktualizacji, kiedy obsługa OBO zostanie rozszerzona na bazy danych inne niż SQL Server.