Pemecahan masalah PostgreSQL

Solusi untuk masalah konektivitas, skema, dan SSL PostgreSQL yang sering terjadi di Data API Builder.

Pertanyaan umum

Apa itu dukungan PostgreSQL di DAB?

Penyusun API Data mendukung PostgreSQL sebagai back end database relasional. DAB terhubung menggunakan driver Npgsql dan menerjemahkan permintaan REST dan GraphQL ke dalam kueri SQL. Baik instans PostgreSQL yang dihost sendiri dan layanan terkelola seperti Azure Database for PostgreSQL didukung.

Format string koneksi apa yang digunakan PostgreSQL?

DAB menggunakan string koneksi gaya ADO.NET untuk PostgreSQL. String umum terlihat seperti Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;. Atur string koneksi di data-source.connection-string bidang dab-config.json atau teruskan melalui --connection-string di dab init.

Apakah DAB mendukung skema PostgreSQL?

Ya. DAB mendukung skema non-publik. Referensikan skema secara eksplisit di bidang entitas source menggunakan format schemaname.tablename (misalnya, sales.orders). Pengguna database yang dikonfigurasi dalam string koneksi harus memiliki USAGE hak istimewa pada skema dan SELECT, , INSERTUPDATE, atau DELETE hak istimewa pada tabel target.

Masalah umum

Tidak dapat tersambung ke kontainer PostgreSQL

Gejala: DAB gagal memulai dengan Failed to connect to localhost:5432 atau kesalahan jaringan serupa.

Menyebabkan: Port kontainer PostgreSQL tidak dipetakan atau kontainer belum siap untuk menerima koneksi.

Resolusi: Konfirmasikan kontainer berjalan dengan docker ps dan port 5432 tersebut dipetakan ke host. Gunakan Host=localhost;Port=5432 dalam string koneksi. Jika kontainer baru saja dimulai, izinkan beberapa detik agar PostgreSQL menginisialisasi sebelum memulai DAB.

Autentikasi kata sandi gagal

Gejala: Log DAB menunjukkan 28P01: password authentication failed for user.

Menyebabkan: Nama pengguna atau kata sandi dalam string koneksi salah, atau pengguna PostgreSQL dikonfigurasi untuk metode autentikasi yang berbeda seperti peer atau ident.

Resolusi: Verifikasi kredensial yang cocok dengan yang ditetapkan saat instans atau kontainer PostgreSQL dibuat. Untuk kontainer, periksa POSTGRES_PASSWORD dan POSTGRES_USER variabel lingkungan. Jika menjalankan di lokal, konfirmasikan pg_hba.conf mengizinkan md5 atau scram-sha-256 autentikasi untuk host yang terhubung.

Skema tidak ditemukan ketika entitas mereferensikan skema non-publik

Gejala: DAB mengembalikan relation "tablename" does not exist kesalahan meskipun tabel ada di database.

Penyebab: Bidang entitas source tidak menyertakan awalan skema, sehingga secara default PostgreSQL hanya mencari pada skema public.

Resolusi:source Perbarui nilai di dab-config.json untuk menyertakan awalan skema, misalnya sales.orders. Pastikan pengguna database memiliki USAGE pada skema dengan menjalankan GRANT USAGE ON SCHEMA sales TO myuser; di psql.

Kesalahan SSL saat menghubungkan ke Azure Database untuk PostgreSQL

Gejala: Koneksi ke Azure Database for PostgreSQL gagal dengan SSL connection is required.

Menyebabkan: Azure Database for PostgreSQL memberlakukan SSL secara default. Koneksi tanpa SSL ditolak.

Resolusi: Tambahkan Ssl Mode=Require; ke string koneksi. Untuk validasi sertifikat lengkap, atur Trust Server Certificate=false juga dan berikan jalur sertifikat CA server melalui Root Certificate=path/to/ca.pem. Unduh bundel sertifikat dari portal Microsoft Azure di bawah pengaturan Jaringan server.

Prosedur tersimpan tidak didukung

Gejala: Mengonfigurasi prosedur atau fungsi tersimpan PostgreSQL sebagai sumber entitas gagal atau entitas tidak bertingkah seperti yang diharapkan.

Menyebabkan: Penyusun API Data saat ini tidak mendukung prosedur tersimpan untuk PostgreSQL. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1023.

Resolusi: Gunakan tabel atau tampilan sebagai sumber entitas sebagai gantinya. Ikuti isu GitHub untuk pembaruan tentang penambahan dukungan prosedur tersimpan PostgreSQL.

Kebijakan basis data tidak diberlakukan untuk operasi pembuatan

Gejala: Permintaan buat mutasi atau POST berhasil bahkan ketika kebijakan database harus membatasi operasi.

Menyebabkan: Dukungan kebijakan database untuk Membuat tindakan di PostgreSQL belum diterapkan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1334.

Resolusi: Gunakan izin berbasis peran untuk membatasi akses pembuatan hingga dukungan kebijakan database untuk PostgreSQL Create tersedia.

Kebijakan database tidak diberlakukan untuk operasi PUT dan PATCH

Gejala: Permintaan PUT atau PATCH pada entitas PostgreSQL berhasil bahkan ketika kebijakan database harus membatasinya.

Menyebabkan: Dukungan kebijakan database untuk operasi PUT dan PATCH di PostgreSQL belum diterapkan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1372.

Resolusi: Gunakan izin berbasis peran untuk membatasi akses pembaruan hingga dukungan kebijakan database untuk operasi pembaruan PostgreSQL tersedia.

Autentikasi On-Behalf-Of (OBO) tidak didukung

Gejala: Mengonfigurasi autentikasi On-Behalf-Of (OBO) untuk instans DAB yang didukung PostgreSQL gagal atau token tidak diteruskan ke database seperti yang diharapkan.

Menyebabkan: Autentikasi OBO saat ini hanya didukung untuk SQL Server dan Azure SQL. Dukungan untuk PostgreSQL, MySQL, dan Azure Cosmos DB belum diimplementasikan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #3159.

Resolusi: Gunakan metode autentikasi yang didukung seperti info masuk string koneksi atau identitas terkelola untuk PostgreSQL. Ikuti masalah GitHub untuk pembaruan saat dukungan OBO diperluas ke database non-SQL Server.