PostgreSQL のトラブルシューティング

データ 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-stringdab-config.jsonフィールドに接続文字列を設定するか、--connection-stringdab init経由で渡します。

DAB は PostgreSQL スキーマをサポートしていますか?

Yes. DAB では、非パブリック スキーマがサポートされています。 形式source (schemaname.tablename など) を使用して、エンティティのsales.orders フィールドでスキーマを明示的に参照します。 接続文字列で設定されたデータベースユーザーには、スキーマに対するUSAGEの特権と、ターゲットテーブルに対するSELECTINSERTUPDATE、または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 ユーザーが peeridentなどの別の認証方法で構成されている。

解像 度: PostgreSQL インスタンスまたはコンテナーの作成時に設定された資格情報と一致するかどうかを確認します。 コンテナーの場合は、 POSTGRES_PASSWORDPOSTGRES_USER 環境変数を確認します。 ローカルで実行している場合は、接続 pg_hba.conf ホストの md5 または scram-sha-256 認証を許可することを確認します。

エンティティが非パブリック スキーマを参照している場合にスキーマが見つかりません

症状: テーブルがデータベースに存在する場合でも、DAB は relation "tablename" does not exist エラーを返します。

原因: エンティティの source フィールドではスキーマ プレフィックスが省略されているため、PostgreSQL では既定で public スキーマのみが検索されます。

解像 度:sourcedab-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 の問題に従ってください。