mcpField
P
postgres

postgres

github.com/digitalocean-labsデータ・データベース3888 回インストール6 日前に更新
リポジトリ

postgres について

セキュリティ分離と本番向け設定を考慮し、DigitalOcean Managed Postgresを構成するスキルです。アプリ開発者向けに、バインド変数とスキーマ分離の手順をスクリプトや運用資料とともに示します。

主な機能

  1. 01データベースのバインド変数
  2. 02スキーマ単位のテナント分離
  3. 03セットアップスクリプト
  4. 04スキーマとユーザーの監査
  5. 05ORMとマイグレーションのガイド

活用シーン

  1. 01単一アプリ用データベースの構成
  2. 02共有クラスターでのテナント分離
  3. 03データベース権限の付与
  4. 04接続文字列の生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/digitalocean-labs/do-app-platform-skills --skill postgres

インストール後、Claude Code で/postgresを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

README.md
reference/
bundled-scripts.md
database-migrations.md
doctl-reference.md
orm-configurations.md
path-a-bindable-vars.md
path-b-schema-isolation.md
troubleshooting.md
scripts/
add_client.py
cleanup_client.py
create_schema_user.py
generate_connection_string.py
get_admin_conn.sh
list_schemas_users.py
secure_setup.py
secure_setup.sh
templates/migrations/
alembic.template.py
templates/orm/
drizzle.template.ts
prisma.template.prisma
sqlalchemy.template.py

詳細

Postgres スキル

DigitalOcean Managed Postgres データベースを、適切なセキュリティ分離と本番環境に対応したデフォルト設定で構成します。

すぐに決める

Need multiple isolated schemas in one database?
├── YES → Path B (Schema Isolation)
└── NO  → Path A (Bindable Variables) ✅ RECOMMENDED

パス A:バインド可能な変数(推奨)

使用するケース:データベースごとに単一のアプリがあり、標準的な CRUD アプリケーションを使用する場合。

クイックスタート
# 1. Create cluster + user via doctl (DO stores password internally)
doctl databases create my-app-db --engine pg --region nyc3 --size db-s-1vcpu-2gb
CLUSTER_ID=$(doctl databases list --format ID,Name --no-header | grep my-app-db | awk '{print $1}')
doctl databases db create $CLUSTER_ID myappdb
doctl databases user create $CLUSTER_ID myappuser

# 2. Grant permissions (REQUIRED - users have no access by default!)
# Run: scripts/grant_permissions.sql as doadmin

# 3. Reference in app spec
# .do/app.yaml
databases:
  - name: db
    engine: PG
    production: true
    cluster_name: my-app-db
    db_name: myappdb
    db_user: myappuser

services:
  - name: api
    envs:
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}

完全なガイド:path-a-bindable-vars.mdを参照してください。


パス B:スキーマ分離

使用するケース:マルチテナント SaaS、1 つのクラスターを複数のアプリで共有する場合、またはスキーマレベルの分離が必要な場合。

クイックスタート
# Hands-free setup (requires gh CLI)
./scripts/secure_setup.sh \
  --admin-url "$ADMIN_URL" \
  --app-name myapp \
  --schema myapp \
  --repo owner/repo

パスワードは GitHub Secrets に直接送信され、画面には表示されません。

完全なガイド:path-b-schema-isolation.mdを参照してください。


利用可能なバインド可能変数

変数例
${db.DATABASE_URL}postgresql://user:pass@host:25060/db?sslmode=require
${db.HOSTNAME}my-db-do-user-123.db.ondigitalocean.com
${db.PORT}25060
${db.USERNAME}myappuser
${db.PASSWORD}(自動入力)
${db.DATABASE}myappdb
${db.CA_CERT}(証明書の内容)

スクリプト

スクリプト用途
scripts/secure_setup.shGitHub Secrets を使った、手動操作不要のパス B セットアップ
scripts/create_schema_user.py分離されたスキーマとユーザーを作成
scripts/list_schemas_users.py既存のスキーマとユーザーを監査
scripts/generate_connection_string.py接続文字列を生成

参考ファイル


よくある問題(簡単な解決方法)

エラー解決方法
"permission denied for schema"doadmin として権限付与用 SQL を実行します
"relation does not exist"search_path を確認するか、スキーマ修飾名を使用します
"too many connections"doctl で接続プールを作成します
"SSL connection required"接続文字列に ?sslmode=require を追加します
バインド可能変数が入力されないproduction: true を確認し、名前が完全に一致していることを確認します

トラブルシューティングの詳細:troubleshooting.mdを参照してください。


他のスキルとの連携

  • → designer:アプリ仕様にデータベースブロックを追加
  • → deployment:DATABASE_URL シークレットを使った GitHub Actions ワークフロー
  • → devcontainers:本番環境と同等のローカル Postgres
  • → troubleshooting:接続テスト用のデバッグコンテナー

コメント