メインコンテンツへスキップ

影響を受けるデータベースを特定する

Database ペインで、問題が開発環境と本番環境のどちらに影響しているかを確認します。これを、失敗したリクエストを実行している環境と比較してください。開発用データベースと本番用データベースをご覧ください。 Replit Status で一致するインシデントがないか確認してください。接続エラーだけから障害だと判断しないでください。

「The endpoint has been disabled」

  1. 未解決の請求の問題や使用制限がないか確認します。
  2. Database ペインを開き、影響を受ける環境を選択します。
  3. Unpause database が表示されている場合は、それを選択してから接続を再試行します。
  4. このコントロールが表示されない場合は、手動で設定した DATABASE_URL が、ペインに表示されているデータベースとは別のデータベースを指していないか確認します。
接続設定は非公開の状態で比較してください。完全な接続文字列を出力したり共有したりしないでください。意図的な外部データベースの設定を削除しないでください。 一時停止の解除に失敗する場合、またはコントロールが表示されないままの場合は、環境、エラー、試した手順を添えて Support にお問い合わせください。再起動を繰り返しても、一時停止したデータベースの調査の代わりにはなりません。

プレビューは接続できるが、公開済みアプリは接続できない

特にリストアや移行の後は、公開済みアプリの本番シークレットとデータベース設定を確認してください。ワークスペースのシークレットだけでは、本番接続の検証にはなりません。 Publishing で Adjust settings と本番シークレットを確認します。アプリが DATABASE_URL と個別の PostgreSQL 変数の両方を使用している場合は、それらが意図した同じデータベースを指していることを確認してください。意図した設定を保存して公開し、書き込みをテストする前に読み取りを確認します。 本番の認証情報をフロントエンドのコードや公開リポジトリにコピーしないでください。

テーブルやレコードが見つからない

まず、アプリがどのデータベースを読み取っているかを確認してください。空の開発用データベースや異なる接続先は、データ損失のように見えることがあります。 最近のマイグレーションでテーブル名やスキーマが変更されていないか確認してください。アプリのコードを公開しても、開発環境のレコードが本番環境にコピーされたことにはなりません。診断の手順として、リセットの実行、テーブルの削除、開発データの本番への上書きコピーを行わないでください。

サポートされていないデータベースオブジェクト

Replit は、Drizzle ORM のマイグレーションツールである drizzle-kit を使用して、次の2つのタイミングでデータベースを管理します。
  • 開発中: Agent が Drizzle スキーマファイルを更新し、drizzle-kit を実行して開発データベースに適用します。
  • 公開時: Replit は開発データベースと本番データベースを比較し、本番を最新の状態にするために必要な SQL を生成します。比較するのはスキーマファイルではなく、データベース自体です。
drizzle-kit が扱えるのは、Drizzle スキーマで記述できるもの、つまりテーブル、列、インデックス、制約、enum、シーケンス、ビュー、行レベルセキュリティポリシーのみです。

サポートされていないもの

これらのオブジェクトは Drizzle スキーマに含まれないため、drizzle-kit は開発環境でそれらを比較・作成できず、公開時にも本番環境にコピーされません。
  • ドメイン: CREATE DOMAIN で作成するカスタム型。
  • 関数、プロシージャ、トリガー。
  • 権限(grants): GRANT で付与するテーブル権限。

限定的なサポート: ロール

Drizzle ではロールを宣言できますが、サポートは限定的です。そのため、現在、公開時にロールの作成、変更、削除は行われません。

SQL で作成したオブジェクト

上記のサポートされていないオブジェクトは、SQL コンソールから手動で作成できます。また、Agent が開発データベース上で直接 SQL を実行することもできます。これらは開発環境とプレビューでは動作しますが、サポートされていないオブジェクトは公開時に本番環境へコピーされません。

オブジェクトがサポートされていない場合に起こること

テーブル、ビュー、デフォルト値、ポリシーがこれらのオブジェクトのいずれかに依存している場合、公開はデータベースマイグレーションの段階で次のようなエラーとともに停止します。
  • function my_function(text) does not exist
  • type "my_domain" does not exist
  • role "app_user" does not exist
Replit は失敗したマイグレーションをロールバックするため、本番データベースは変更されません。 トリガーと権限は通常、エラーの原因になりません。公開は成功しますが、公開したアプリの動作がプレビューと異なる場合があります。たとえば、タイムスタンプを更新するトリガーは本番環境では実行されません。 どちらの場合も、本番環境で不足しているものを見つけ、本番環境に適用してから、もう一度公開してください。

本番環境で不足しているものを見つける

Agent は本番データベースへの読み取り専用アクセス権を持っているため、この比較を代行できます。不足しているオブジェクトを本番環境に適用するのプロンプトをご覧ください。自分で確認する場合は、SQL console から両方のデータベースで同じ読み取り専用クエリを実行し、結果を比較します。
開発環境にのみ存在するものは、本番環境に適用する必要があります。一部のロールは Replit によって作成され、2つのデータベース間で異なります。必要なのは、アプリのポリシーや権限が使用しているロールだけです。

不足しているオブジェクトを本番環境に適用する

上級者向け: これらの手順では、公開時に引き継がれないオブジェクト(関数、トリガー、ロールなど)を追加するために、稼働中の本番データベースで直接 SQL を実行します。SQL の手動実行はサポート対象外のフローであり、サポートできる範囲は限られるため、SQL の操作に慣れている場合にのみお勧めします。まずデータリカバリーで選択肢を確認し、アプリのトラフィックが少ないときに変更を適用してください。
  1. Agent に、データベースを比較して不足しているものを埋めるスクリプトを書くよう依頼します。プロジェクト内の Agent に次のプロンプトを貼り付けてください。 Agent は本番データベースを読み取れますが変更はできないため、スクリプトは次の手順であなた自身が実行します。
  2. Database ツールで本番データベースを選択し、My Data を開いて、Enable Editing をオンにします。
  3. SQL console を開き、スクリプトを実行します。
  4. Enable Editing をオフにしてから、もう一度公開します。
公開によってこれらのオブジェクトが削除されることはないため、今後の公開でもそのまま残ります。スクリプトはプロジェクト内に保管し、開発環境でこれらのオブジェクトを追加または変更するたびに再度実行してください。

データが削除または上書きされた

復旧を検討している間は、影響を受けるデータへの回避可能な書き込みを停止してください。リストアにより、新しいデータが置き換えられる可能性があります。復旧操作を確定する前に、現在の状態を保全し、影響範囲を把握してください。
影響を受けた環境、最後に正常だったおおよその日時とタイムゾーン、何が変更されたかを記録します。そのデータベースに表示される復旧オプションと利用可能な履歴を確認してください。保持期間と復旧方法はデータベースと設定によって異なります。古いタイムスタンプが復旧可能だと思い込まないでください。 データリカバリーのデータベース固有の手順を使用してください。アプリのコードをロールバックすれば本番データも復元されると思い込まないでください。 安全な復旧方法を特定できない場合は、Support にお問い合わせください。復旧は保証されておらず、保持期間を延ばしても、保持されていなかった履歴を再作成することはできません。

認証情報が漏えいした可能性がある

共有されている資料から漏えいした値を削除してください。サポートされている本番データベースの場合は、Database ツールで認証情報を再生成してください。先に、対象となる要件と中断に関する警告を確認してください。外部クライアントを新しい接続文字列に更新してください。この操作が利用できない場合は、Support にお問い合わせください。認証情報をローテーションするためにデータベースを削除しないでください。

Support 向けの情報

プロジェクトの URL、環境、サニタイズ済みのエラー、タイムゾーンを含む日時、最近のマイグレーションやリストア、すでに完了した確認を含めてください。データベースの認証情報、完全な接続文字列、顧客レコードは含めないでください。サポートチェックリストをご覧ください。