بنقرة واحدة
db-snapshot
Create schema-only snapshot for rollback capability
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Create schema-only snapshot for rollback capability
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف 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