AgentSkillsCN

supabase-cli

Supabase CLI使用的全面指南,涵盖数据库初始化、迁移、类型生成、API密钥管理和直接查询执行。当您使用Supabase本地开发、数据库模式管理或任何CLI命令时,可使用此技能。

SKILL.md
--- frontmatter
name: supabase-cli
description: Comprehensive guide for Supabase CLI usage covering database initialization, migrations, type generation, API key management, and direct query execution. Use this skill when working with Supabase local development, database schema management, or any CLI command usage.

Supabase CLI

Overview

This skill provides complete guidance for using Supabase CLI across all development workflows. It covers database initialization, migration management, type generation, API key retrieval, direct database access, and deployment strategies.

Use this skill when:

  • Setting up new Supabase projects
  • Managing database migrations
  • Generating TypeScript types from database schema
  • Retrieving API keys and connection details
  • Executing SQL queries directly
  • Troubleshooting local development issues
  • Deploying schema changes to production

Quick Start

Initial Project Setup

Initialize a new Supabase project:

bash
supabase init

Start local development stack:

bash
supabase start

Get connection details and API keys:

bash
supabase status

Link to remote project:

bash
supabase link --project-ref PROJECT_REF

Database Initialization

Creating New Local Database

Start fresh local Supabase instance:

bash
supabase init
supabase start

This creates:

  • Local PostgreSQL database on port 54322
  • Studio dashboard at http://localhost:54323
  • API server on port 54321
  • All Supabase services (Auth, Storage, Realtime, etc.)

Resetting Database

Reset database to clean state with all migrations applied:

bash
supabase db reset

Reset without running seed data:

bash
supabase db reset --no-seed

Checking Status

View all running services and connection details:

bash
supabase status

Export connection details as environment variables:

bash
supabase status -o env > .env.local

Migration Management

Creating Migrations

Method 1: Manual SQL File

Create new migration file:

bash
supabase migration new create_users_table

Edit supabase/migrations/<timestamp>_create_users_table.sql:

sql
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email TEXT UNIQUE NOT NULL,
  created_at TIMESTAMPTZ DEFAULT now()
);

Apply migration:

bash
supabase db reset

Method 2: Auto-Generate from Diff

Make schema changes in Studio (http://localhost:54323), then generate migration:

bash
supabase db diff -f add_users_table

Review generated file at supabase/migrations/<timestamp>_add_users_table.sql, then apply:

bash
supabase db reset

Deploying Migrations

Preview changes before deployment:

bash
supabase db push --linked --dry-run

Deploy to remote:

bash
supabase db push --linked

Deploy with seed data:

bash
supabase db push --linked --include-seed

Deploy with custom roles:

bash
supabase db push --linked --include-roles

Pulling Remote Schema

Import existing remote schema to local:

bash
supabase link --project-ref PROJECT_REF
supabase db pull initial_schema
supabase db reset

Pull specific schemas only:

bash
supabase db pull -s public,extensions

Migration Best Practices

Always follow this workflow:

  1. Create migration locally
  2. Apply with supabase db reset
  3. Generate types
  4. Test application
  5. Commit migration file
  6. Deploy with supabase db push --linked --dry-run first
  7. Deploy with supabase db push --linked

Type Generation

TypeScript Types

Generate types from local database:

bash
supabase gen types typescript --local > src/lib/types/database.types.ts

Generate from remote:

bash
supabase gen types typescript --linked > src/lib/types/database.types.ts

Generate specific schemas:

bash
supabase gen types typescript --local --schema public,extensions > src/lib/types/database.types.ts

Other Languages

Generate Go types:

bash
supabase gen types go --local > types/database.go

Generate Swift types:

bash
supabase gen types swift --local --swift-access-control public > Types/Database.swift

Automation

Regenerate types after every schema change:

bash
supabase db reset && supabase gen types typescript --local > src/lib/types/database.types.ts

API Key Management

Getting Local Keys

View all local API keys:

bash
supabase status

Extract keys to environment file:

bash
supabase status -o env > .env.local

Result includes:

  • SUPABASE_URL - API endpoint
  • SUPABASE_ANON_KEY - Client-side public key
  • SUPABASE_SERVICE_ROLE_KEY - Server-side admin key
  • DATABASE_URL - Direct database connection

Getting Remote Keys

Authenticate first:

bash
supabase login

Link to project:

bash
supabase link --project-ref PROJECT_REF

Retrieve API keys:

bash
supabase projects api-keys --project-ref PROJECT_REF

Direct Database Access

Using psql

Connect to local database:

bash
psql postgresql://postgres:postgres@localhost:54322/postgres

Execute single query:

bash
psql postgresql://postgres:postgres@localhost:54322/postgres -c "SELECT * FROM users;"

Run SQL file:

bash
psql postgresql://postgres:postgres@localhost:54322/postgres -f query.sql

Connection Details

Get database URL from status:

bash
supabase status

Extract only database URL:

bash
supabase status | grep "DB URL"

Running Migrations Manually

Apply specific SQL file:

bash
psql postgresql://postgres:postgres@localhost:54322/postgres -f supabase/migrations/20230101_my_migration.sql

Common Workflows

Standard Development Cycle

Daily workflow:

bash
# Morning: Start stack
supabase start

# Make schema changes in Studio or create migration
supabase migration new add_feature

# Apply changes
supabase db reset

# Regenerate types
supabase gen types typescript --local > src/lib/types/database.types.ts

# Test application
npm run dev

# Commit changes
git add supabase/migrations/ src/lib/types/database.types.ts
git commit -m "feat: add new feature schema"

# Deploy to production
supabase db push --linked --dry-run
supabase db push --linked

Team Collaboration

New developer setup:

bash
# Clone repository
git clone REPO_URL

# Install CLI
npm install

# Login to Supabase
supabase login

# Start local development
supabase start

# Apply all migrations
supabase db reset

# Generate types
supabase gen types typescript --local > src/lib/types/database.types.ts

After pulling teammate's changes:

bash
git pull
supabase db reset
supabase gen types typescript --local > src/lib/types/database.types.ts

Production Deployment

Safe deployment pattern:

bash
# Link to production project
supabase link --project-ref PRODUCTION_REF

# Preview changes
supabase db push --linked --dry-run

# Review output carefully

# Deploy
supabase db push --linked

# Verify deployment
supabase db pull verify_deployment

Troubleshooting

Port Conflicts

If ports are already in use, edit supabase/config.toml:

toml
[api]
port = 55321

[db]
port = 55322

[studio]
port = 55323

Then restart:

bash
supabase stop
supabase start

Database in Bad State

Reset completely:

bash
supabase stop
docker volume prune
supabase start
supabase db reset

Migration Conflicts

Pull remote changes first:

bash
supabase db pull remote_changes

Resolve conflicts in migration files, then:

bash
supabase db reset
supabase db push --linked

Type Mismatches

Regenerate types from current schema:

bash
supabase gen types typescript --local > src/lib/types/database.types.ts

Command Reference

For complete CLI command reference with all flags and options, see references/cli-commands.md.

For detailed workflow examples and patterns, see references/workflows.md.

Most Used Commands

Setup:

  • supabase init - Initialize project
  • supabase login - Authenticate
  • supabase link - Link to remote project
  • supabase start - Start local stack
  • supabase status - View connection details

Database:

  • supabase db reset - Reset database with migrations
  • supabase db diff -f NAME - Generate migration from diff
  • supabase db push --linked - Deploy migrations
  • supabase db pull - Import remote schema

Migrations:

  • supabase migration new NAME - Create new migration
  • supabase migration list - List all migrations

Types:

  • supabase gen types typescript --local - Generate TypeScript types

Keys:

  • supabase status - Get local keys
  • supabase projects api-keys - Get remote keys

Cleanup:

  • supabase stop - Stop local stack

Resources

references/cli-commands.md

Complete command reference with all flags, options, and examples for every Supabase CLI command. Load this when:

  • Need detailed flag information for specific command
  • Looking up exact syntax
  • Exploring advanced command options

Search patterns:

bash
# Find commands related to migrations
grep -i "migration" references/cli-commands.md

# Find commands for type generation
grep -i "gen types" references/cli-commands.md

# Find database commands
grep -i "supabase db" references/cli-commands.md

references/workflows.md

Comprehensive workflow guides covering:

  • Initial setup patterns
  • Schema development workflows
  • Migration management strategies
  • Type generation automation
  • Team collaboration patterns
  • CI/CD integration
  • Troubleshooting common issues

Load this when:

  • Planning complex workflow
  • Setting up team collaboration
  • Configuring CI/CD pipelines
  • Solving workflow-specific problems
  • Looking for best practices