Managed Postgres

Lizard (lizard.build) の Managed Postgres は、lizard add postgres でプロジェクトに追加する PostgreSQL データベースです。新しいデータベースはデフォルトで PostgreSQL 18 で動作します。Lizard は接続文字列を DATABASE_URL に、その構成要素を PGHOST、PGPORT、PGUSER、PGPASSWORD、PGDATABASE に格納し、サービスは ${{postgres.DATABASE_PRIVATE_URL}} のような参照で値を読み取ります。データベースはアプリと同じ CPU、メモリ、ストレージの 料金 で課金され、ダッシュボードには SQL エディターが用意されています。概要と料金については、Managed Postgres のページ を参照してください。

プロビジョニング

lizard add postgres

最初の Postgres アドオンの名前は postgres なので、${{postgres.DATABASE_URL}} はすぐに使えます。

環境変数

このアドオンは、標準的な接続変数一式を公開します:

変数説明
DATABASE_URLパブリックエンドポイント経由の完全な接続文字列 (postgresql://…)
DATABASE_PRIVATE_URLプロジェクトのプライベートネットワーク経由の接続文字列 (<name>.lizard.internal:5432)
PGHOSTホスト
PGPORTポート
PGUSERユーザー
PGPASSWORDパスワード
PGDATABASEデータベース名
POSTGRES_USERユーザーのエイリアス
POSTGRES_DBデータベースのエイリアス
POSTGRES_PASSWORDパスワードのエイリアス

Postgres 接続文字列

各データベースには 2 つの接続文字列があります。どちらもユーザー postgres とデータベース postgres を使用します:

変数使用元形式
DATABASE_PRIVATE_URL同じプロジェクト内のサービスpostgresql://postgres:<password>@<name>.lizard.internal:5432/postgres
DATABASE_URL手元のマシン、CI、または別のプロジェクトのサービスpostgresql://postgres:<password>@<host>:<port>/postgres

<name> はプロジェクト内でのデータベースの名前で、最初のデータベースでは postgres です。パブリックなホストとポートは Lizard がデータベースの作成時に割り当てるため、手入力せずに DATABASE_URL、PGHOST、PGPORT から読み取ってください。プライベートアドレスはプロジェクト内でのみ機能します。プライベートネットワーク を参照してください。

ほとんどのドライバーは、この文字列をそのまま受け付けます:

// Node.js with pg
import pg from 'pg';
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
# Python with psycopg
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])

psql やその他の libpq ツールは PG* 変数を読み取るため、引数なしで接続できます。

接続文字列はどこで確認できますか?

  • ダッシュボード: プロジェクトでデータベースを開きます。Overview タブには、DATABASE_URL とプライベート URL がコピーボタン付きで表示されます。Secrets タブには、すべての接続変数と、サービスに貼り付ける ${{…}} 参照が一覧表示されます。
  • CLI: lizard run --service postgres -- printenv DATABASE_URL はパブリックな接続文字列を出力します。パスワードが含まれているため、ログやチャットに貼り付けないでください。

この文字列は認証情報です。シークレットにコピーするのではなく、参照でサービスから指定してください。そうすれば、サービスはデプロイのたびに現在の値を受け取ります。

サービスを接続

利用側のサービスからプライベート接続文字列を参照し、再デプロイします:

lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service api
lizard redeploy --service api

参照はデプロイ時に解決されるため、利用側の各サービスは次回のデプロイ時にアドオンの現在の値を取得します。プロジェクト外のクライアントには、代わりに DATABASE_URL を使用してください。プロジェクト内のすべてのサービスには、アドオンのパブリックな DATABASE_URL も最も低い優先順位で渡されます。明示的な参照はこれを上書きします。

接続文字列を表示せずに、手元のマシンから接続を確認します:

lizard run --service postgres -- sh -c 'psql "$DATABASE_URL" -c "SELECT 1"'

lizard run --service postgres は、データベースのパブリックな接続値を使って手元のマシンでコマンドを実行するため、ローカルに psql がインストールされている必要があります。lizard run --service api では、${{…}} 参照がそのままの文字列として渡されます。lizard run を参照してください。

デプロイ時にマイグレーションを実行

マイグレーションには pre-deploy コマンドを使用します。このコマンドは start コマンドも設定されている場合にだけ、すべてのコンテナの起動時に sh -c "<pre> && exec <start>" として実行されます。つまり、レプリカごと、再起動ごとに実行されます。マイグレーションは何度実行しても、同時に実行しても安全で、新旧両方のアプリケーションで動くようにしてください:

lizard service set api --set preDeployCommand="npm run migrate" --set startCommand="npm start"
lizard redeploy --service api

Django アプリの場合、コマンドは python manage.py migrate です。Django ガイド と Pythonアプリホスティング を参照してください。Umami と Flowise のガイドでは、Managed Postgres 上で動くアプリ全体の構成を紹介しています。

データの参照とクエリ

ダッシュボードの Postgres editor (lizard open) を開いて、SQL を実行し、テーブルを直接参照できます。一時的なローカル作業には、アドオンの接続値を使ってコマンドを実行します:

lizard run --service postgres -- sh -c 'exec psql "$DATABASE_URL"'

ストレージを拡張

データボリュームは拡張のみ可能です:

lizard scale --service postgres --storage 8192

複数のデータベース

2 つ目の Postgres を追加すると、自動生成された名前が付きます(例: postgres-autumn-bear)。明示的に参照してください:

lizard add postgres
lizard secrets set ANALYTICS_URL='${{postgres-autumn-bear.DATABASE_PRIVATE_URL}}' --service api

バックアップとリストア

定期バックアップやポイントインタイムリカバリを利用できるとは限りません。リスクのあるマイグレーションの前には、自分でデータベースをエクスポートし、別のデータベースでリストアをテストしてください。たとえば、ローカルに pg_dump 18 以降がインストールされている場合は次のようにします:

lizard run --service postgres -- sh -c 'pg_dump "$DATABASE_URL" > backup.sql'

リストアの計画については、ストレージとリカバリ を参照してください。

関連項目

更新日