データ API ビルダーでの PostgreSQL の接続、スキーマ、SSL に関する一般的な問題の解決策。
一般的な質問
DAB での PostgreSQL サポートとは
データ API ビルダーは、PostgreSQL をリレーショナル データベース バックエンドとしてサポートします。 DAB は Npgsql ドライバーを使用して接続し、REST 要求と GraphQL 要求を SQL クエリに変換します。 セルフホステッド PostgreSQL インスタンスと、Azure Database for PostgreSQL などのマネージド サービスの両方がサポートされています。
PostgreSQL ではどのような接続文字列形式が使用されますか?
DAB は、PostgreSQL 用の ADO.NET スタイルの接続文字列を使用します。 一般的な文字列は Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword;のようになります。
data-source.connection-stringのdab-config.jsonフィールドに接続文字列を設定するか、--connection-stringのdab init経由で渡します。
DAB は PostgreSQL スキーマをサポートしていますか?
Yes. DAB では、非パブリック スキーマがサポートされています。 形式source (schemaname.tablename など) を使用して、エンティティのsales.orders フィールドでスキーマを明示的に参照します。 接続文字列で設定されたデータベースユーザーには、スキーマに対するUSAGEの特権と、ターゲットテーブルに対するSELECT、INSERT、UPDATE、またはDELETEの権限が必要です。
一般的な問題
PostgreSQL コンテナーに接続できない
症状: DAB は、 Failed to connect to localhost:5432 または同様のネットワーク エラーで開始できません。
原因: PostgreSQL コンテナー ポートがマップされていないか、コンテナーが接続を受け入れる準備ができていません。
解像 度: コンテナーが docker ps で実行されており、ポート 5432 がホストにマップされていることを確認します。 接続文字列で Host=localhost;Port=5432 を使用します。 コンテナーが起動したばかりの場合は、DAB を開始する前に PostgreSQL が初期化されるまでに数秒を許可します。
パスワード認証に失敗しました
症状: DAB ログには 28P01: password authentication failed for userが表示されます。
原因: 接続文字列のユーザー名またはパスワードが正しくないか、PostgreSQL ユーザーが peer や identなどの別の認証方法で構成されている。
解像 度: PostgreSQL インスタンスまたはコンテナーの作成時に設定された資格情報と一致するかどうかを確認します。 コンテナーの場合は、 POSTGRES_PASSWORD と POSTGRES_USER 環境変数を確認します。 ローカルで実行している場合は、接続 pg_hba.conf ホストの md5 または scram-sha-256 認証を許可することを確認します。
エンティティが非パブリック スキーマを参照している場合にスキーマが見つかりません
症状: テーブルがデータベースに存在する場合でも、DAB は relation "tablename" does not exist エラーを返します。
原因: エンティティの source フィールドではスキーマ プレフィックスが省略されているため、PostgreSQL では既定で public スキーマのみが検索されます。
解像 度:sourceのdab-config.json値を更新して、sales.ordersなどのスキーマ プレフィックスを含めます。
USAGEのスキーマ上でGRANT USAGE ON SCHEMA sales TO myuser;を実行して、データベースユーザーがpsqlを持っていることを確認します。
Azure Database for PostgreSQL への接続に SSL が必要なエラー
症状: Azure Database for PostgreSQL への接続は、 SSL connection is requiredで失敗します。
原因: Azure Database for PostgreSQL では、既定で SSL が適用されます。 SSL を使用しない接続は拒否されます。
解像 度: 接続文字列に Ssl Mode=Require; を追加します。 完全な証明書検証を行う場合は、 Trust Server Certificate=false も設定し、 Root Certificate=path/to/ca.pem経由でサーバー CA 証明書のパスを指定します。 サーバーのネットワーク設定で、Azure portal から証明書バンドル を ダウンロードします。
ストアド プロシージャはサポートされていません
症状: PostgreSQL ストアド プロシージャまたは関数をエンティティ ソースとして構成できないか、エンティティが期待どおりに動作しません。
原因: データ API ビルダーは現在、PostgreSQL のストアド プロシージャをサポートしていません。 これは、 GitHub の問題 #1023 で追跡されている既知の制限です。
解像 度: 代わりに、エンティティ ソースとしてテーブルまたはビューを使用します。 PostgreSQL ストアド プロシージャのサポートが追加されたときの更新については、GitHub の問題に従ってください。
作成操作にデータベース ポリシーが適用されない
症状: データベース ポリシーで操作を制限する必要がある場合でも、作成の変更または POST 要求は成功します。
原因: PostgreSQL でのアクションの作成に対するデータベース ポリシーのサポートはまだ実装されていません。 これは、 GitHub の問題 #1334 で追跡されている既知の制限です。
解像 度: PostgreSQL 作成に対するデータベース ポリシーのサポートが利用可能になるまで、ロールベースのアクセス許可を使用して作成アクセスを制限します。
PUT および PATCH 操作に対してデータベース ポリシーが適用されない
症状: データベース ポリシーで制限する必要がある場合でも、PostgreSQL エンティティに対する PUT または PATCH 要求は成功します。
原因: PostgreSQL での PUT 操作と PATCH 操作に対するデータベース ポリシーのサポートはまだ実装されていません。 これは、 GitHub の問題 #1372 で追跡されている既知の制限です。
解像 度: PostgreSQL 更新操作に対するデータベース ポリシーのサポートが利用できるようになるまで、ロールベースのアクセス許可を使用して更新アクセスを制限します。
On-Behalf-Of (OBO) 認証はサポートされていません
症状: PostgreSQL ベースの DAB インスタンスに対するオンBehalf-Of (OBO) 認証の構成が失敗するか、トークンが想定どおりにデータベースに転送されません。
原因: OBO 認証は現在、SQL Server と Azure SQL でのみサポートされています。 PostgreSQL、MySQL、Azure Cosmos DB のサポートはまだ実装されていません。 これは、 GitHub の問題 #3159 で追跡されている既知の制限です。
解像 度: PostgreSQL の接続文字列資格情報やマネージド ID など、サポートされている認証方法を使用します。 OBO サポートが SQL Server 以外のデータベースに拡張される場合の更新については、GitHub の問題に従ってください。