com um clique
db-snapshot
Create schema-only snapshot for rollback capability
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Create schema-only snapshot for rollback capability
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Execute story development with selectable automation modes to accommodate different developer preferences, skill levels, and story complexity.
Set up a Kord-aligned documentation baseline (no legacy frameworks)
Create Next Story Task methodology and workflow
Validate Next Story Task methodology and workflow
advanced-elicitation methodology and workflow
No checklists needed - this task facilitates brainstorming sessions, validation is through user interaction methodology and workflow
| name | db-snapshot |
| description | Create schema-only snapshot for rollback capability |
| agent | architect |
| subtask | false |
Create schema-only snapshot for rollback capability
Parameter:* mode (optional, default: interactive)
Purpose:* Definitive pass/fail criteria for task completion
Checklist:*
acceptance-criteria:
- [ ] Data persisted correctly; constraints respected; no orphaned data
type: acceptance-criterion
blocker: true
validation: |
Assert data persisted correctly; constraints respected; no orphaned data
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
Strategy:* retry
Common Errors:*
Error:* Connection Failed
Error:* Query Syntax Error
Error:* Transaction Rollback
label (string): Snapshot label/name (e.g., "baseline", "pre_migration", "v1_2_0")Ask user:
{label}mkdir -p supabase/snapshots
TS=$(date +%Y%m%d_%H%M%S)
LABEL="{label}"
FILENAME="supabase/snapshots/${TS}_${LABEL}.sql"
echo "Creating snapshot: $FILENAME"
pg_dump "$SUPABASE_DB_URL" \
--schema-only \
--clean \
--if-exists \
--no-owner \
--no-privileges \
> "$FILENAME"
if [ $? -eq 0 ]; then
echo "✅ Snapshot created: $FILENAME"
ls -lh "$FILENAME"
else
echo "❌ Snapshot failed"
exit 1
fi
Quick sanity check:
# Check file size (should be > 0)
if [ ! -s "$FILENAME" ]; then
echo "⚠️ Snapshot file is empty"
exit 1
fi
# Count schema objects
echo ""
echo "=== Snapshot Contents ==="
grep -c "CREATE TABLE" "$FILENAME" && echo "tables found" || echo "no tables"
grep -c "CREATE FUNCTION" "$FILENAME" && echo "functions found" || echo "no functions"
grep -c "CREATE POLICY" "$FILENAME" && echo "policies found" || echo "no policies"
cat > "supabase/snapshots/${TS}_${LABEL}.meta" <<EOF
Snapshot: ${TS}_${LABEL}
Created: $(date -Iseconds)
Label: ${LABEL}
Database: $(echo "$SUPABASE_DB_URL" | sed 's/:.*/:[REDACTED]/')
Purpose: [user provided purpose]
File: ${FILENAME}
Size: $(ls -lh "$FILENAME" | awk '{print $5}')
To restore:
rollback supabase/snapshots/${TS}_${LABEL}.sql
Or manually:
psql "\$SUPABASE_DB_URL" -f "${FILENAME}"
EOF
cat "supabase/snapshots/${TS}_${LABEL}.meta"
✅ Snapshot Created Successfully
File: supabase/snapshots/20251026_143022_pre_migration.sql
Size: 45.2 KB
Timestamp: 20251026_143022
Label: pre_migration
Contents:
- 12 tables
- 8 functions
- 15 policies
To restore this snapshot:
rollback supabase/snapshots/20251026_143022_pre_migration.sql
Metadata saved to:
supabase/snapshots/20251026_143022_pre_migration.meta
pg_dump "$SUPABASE_DB_URL" \
--clean \
--if-exists \
--no-owner \
--no-privileges \
> "$FILENAME"
pg_dump "$SUPABASE_DB_URL" \
--schema-only \
--table="users" \
--table="profiles" \
> "$FILENAME"
Always before:*
Regularly:*
Good names:*
baseline - Initial schema statepre_migration - Before any migrationpre_v1_2_0 - Before version deploymentworking_state - Known good stateBad names:*
backup - Too generictest - Unclear purposesnapshot1 - No contextKeep snapshots for:
# Example cleanup (keep last 10)
cd supabase/snapshots
ls -t *.sql | tail -n +11 | xargs rm -f
| Feature | Snapshot (pg_dump) | Supabase Backup |
|---|---|---|
| Speed | Fast | Depends |
| Scope | Schema only (default) | Full database |
| Storage | Local files | Supabase managed |
| Restore | Manual psql | Supabase dashboard |
| Version control | ✅ Git-friendly | ❌ Binary |
| Automation | Easy (script) | Automatic |
Use snapshots for:*
Use Supabase backups for:*
Problem*: Cannot connect to database
Fix*: Check SUPABASE_DB_URL
env-check
Problem*: Insufficient privileges
Fix*: Use connection string with sufficient permissions
Problem*: No schema objects or connection failed
Fix*:
SELECT * FROM pg_tables WHERE schemaname='public';Problem*: Including data unintentionally
Fix*: Use --schema-only flag explicitly
snapshot pre_migration # Create rollback point
verify-order migration.sql # Check DDL order
dry-run migration.sql # Test safely
apply-migration migration.sql # Apply
snapshot post_migration # Capture new state
snapshot before_changes
# ... make changes ...
snapshot after_changes
diff supabase/snapshots/_before_changes.sql \
supabase/snapshots/_after_changes.sql
# Visual diff
diff -u snapshot1.sql snapshot2.sql | less
# Summary of changes
diff snapshot1.sql snapshot2.sql | grep "^[<>]" | head -20
# Just table definitions
grep -A 20 "CREATE TABLE" snapshot.sql
# Just functions
sed -n '/CREATE FUNCTION/,/\$\$/p' snapshot.sql
# Snapshot before commit
snapshot before_feature_x
git add supabase/snapshots/_before_feature_x.sql
git commit -m "snapshot: schema before feature X"
⚠️ Snapshots may contain sensitive schema info*:
In public repos:*
Do NOT commit:*
--data-included#!/bin/bash
# Save as: scripts/daily-snapshot.sh
DATE=$(date +%Y%m%d)
snapshot "daily_${DATE}"
# Cleanup old snapshots (keep 7 days)
find supabase/snapshots -name "daily_*.sql" -mtime +7 -delete
# In CI/CD pipeline
- name: Create pre-deploy snapshot
run: |
/db-sage
snapshot "pre_deploy_${CI_COMMIT_SHA}"
rollback {snapshot} - Restore snapshotapply-migration {path} - Includes automatic snapshotsenv-check - Verify pg_dump available