name: supabase-operations
Supabase Management APIを使った各種操作のスキル。
Supabase Dashboard → Account Settings → Access Tokens で生成。 環境変数に設定:
export SUPABASE_ACCESS_TOKEN="sbp_xxxx..."
各プロジェクトのURLから取得: https://{PROJECT_REF}.supabase.co
単発クエリ実行には scripts/query-supabase.sh を使用:
scripts/query-supabase.sh <project-ref> "SELECT * FROM your_table LIMIT 10"
よく使うクエリ例:
"SELECT COUNT(*) FROM quizzes""SELECT category_id, COUNT(*) FROM quizzes GROUP BY category_id""INSERT INTO quizzes (...) VALUES (...)"SQLファイルからの大量データ投入には scripts/bulk-insert.sh を使用:
scripts/bulk-insert.sh <project-ref> your_file.sql
# プロジェクトリンク(初回のみ)
SUPABASE_ACCESS_TOKEN=$TOKEN supabase link --project-ref $PROJECT_REF
# デプロイ
SUPABASE_ACCESS_TOKEN=$TOKEN supabase functions deploy function-name
# マイグレーション状態確認
supabase migration list
# マイグレーション適用
supabase db push
| エラー | 原因 | 対処 |
|---|---|---|
| 401 | Access Token無効 | Tokenを再生成 |
| 403 | 権限不足 | プロジェクトオーナー確認 |
| 42501 (RLS) | Anon keyでINSERT不可 | Management API使用 |
| 429 | レート制限 | 少し待って再実行 |
ltjiitmfishpgcnlmonr詳細は references/projects.md を参照。
42501 エラーになる。Management API(SUPABASE_ACCESS_TOKEN 使用)を使えばRLSをバイパスできるquery フィールドにユーザー入力を直接埋め込むと危険。特に一括INSERTでSQLファイルを jq -Rs でエスケープする際、元のSQL内のシングルクォートが正しくエスケープされているか確認するSUPABASE_ACCESS_TOKEN は無期限ではない。401エラーが返ったら、Supabase Dashboard → Account Settings → Access Tokens で再生成する