| name | dbcli-export-schema |
| description | Export database schema objects (procedures, functions, triggers, views, indexes) as SQL scripts for backup |
| license | MIT |
| compatibility | Requires DbCli CLI tool (based on .NET 10 and SqlSugar). Supports Windows, Linux, macOS. |
| metadata | {"tool":"dbcli","version":"1.0.0","category":"database","supported-databases":"30+","operation-type":"backup-export-schema","safety-level":"safe","requires-backup":"no","tags":["dbcli","sql","backup","schema","ddl","export","procedures","functions","triggers","views","indexes"],"repository":"https://github.com/your-repo/dbcli"} |
| allowed-tools | dbcli |
DbCli Schema Export Skill
Command Style (Use PATH)
All examples use the plain command name dbcli (no directory prefix).
Ensure dbcli is on PATH instead of hardcoding paths like .\.claude\skills\dbcli\dbcli.exe.
Overview
Export database schema objects (stored procedures, functions, triggers, views, indexes) as SQL DDL scripts for backup and recovery. This skill is essential for protecting database objects before DROP or ALTER operations.
Safety Level: Safe (read-only operation)
Requires Backup: No (this tool creates backups)
Quick Start
export DBCLI_CONNECTION="Server=.;Database=mydb"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema all -o backup_schema.sql
dbcli export-schema all --output-dir ./schema_export
dbcli export-schema procedure -o backup_procedures.sql
export DBCLI_CONNECTION="Data Source=app.db"
dbcli export-schema index -o backup_indexes.sql
dbcli export-schema trigger -o backup_triggers.sql
export DBCLI_CONNECTION="Server=.;Database=mydb"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema procedure --name "sp_User*"
Command Syntax
Basic Usage
dbcli export-schema <type> [options]
Arguments
<type> - Object type to export:
all - All schema objects (default)
procedure - Stored procedures
function - User-defined functions
trigger - Triggers
view - Views
index - Indexes
Options
-n, --name <pattern> - Filter objects by name (supports wildcards)
-o, --output <file> - Save to file (default: console output)
--output-dir <dir> - Save as separate files under a directory (one file per object)
Connection Options
- Environment variables:
DBCLI_CONNECTION: Database connection string
DBCLI_DBTYPE: Database type
-t, --db-type <type> - Database type (sqlite, sqlserver, mysql, postgresql, etc.)
--config <path> - Configuration file path
Examples
SQLite
export DBCLI_CONNECTION="Data Source=app.db"
dbcli export-schema trigger
dbcli export-schema index -o backup_indexes.sql
dbcli export-schema all -o backup_all.sql
SQL Server
export DBCLI_CONNECTION="Server=.;Database=mydb;Trusted_Connection=True"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema procedure -o procedures_backup.sql
dbcli export-schema procedure --name "sp_User*" -o user_procedures.sql
dbcli export-schema function -o functions_backup.sql
dbcli export-schema trigger -o triggers_backup.sql
MySQL
export DBCLI_CONNECTION="Server=localhost;Database=mydb;Uid=root;Pwd=xxxxxxxxxx"
export DBCLI_DBTYPE="mysql"
dbcli export-schema procedure -o procedures.sql
dbcli export-schema trigger -o triggers.sql
dbcli export-schema index -o indexes.sql
PostgreSQL
export DBCLI_CONNECTION="Host=localhost;Database=mydb;Username=postgres;Password=xxxxxxxxxx"
export DBCLI_DBTYPE="postgresql"
dbcli export-schema function -o functions.sql
dbcli export-schema trigger -o triggers.sql
dbcli export-schema view -o views.sql
Use Cases
1. Pre-deployment Backup
dbcli export-schema all -o "backup_$(date +%Y%m%d_%H%M%S).sql"
2. Procedure Refactoring
export DBCLI_CONNECTION="Server=.;Database=mydb"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema procedure -o old_procedures.sql
dbcli ddl "DROP PROCEDURE sp_OldProc"
dbcli ddl "CREATE PROCEDURE sp_NewProc..."
3. Index Optimization
export DBCLI_CONNECTION="Data Source=app.db"
dbcli export-schema index -o indexes_before.sql
dbcli ddl "DROP INDEX idx_slow"
dbcli ddl "CREATE INDEX idx_fast ON Table(col1, col2)"
dbcli export-schema index -o indexes_after.sql
4. Database Migration
export DBCLI_CONNECTION="Server=source;Database=db"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema all -o schema_export.sql
5. Continuous Backup Script
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="./schema_backups"
mkdir -p $BACKUP_DIR
dbcli --config production.json \
export-schema all \
-o "$BACKUP_DIR/schema_${TIMESTAMP}.sql"
echo "Schema backed up to: $BACKUP_DIR/schema_${TIMESTAMP}.sql"
find $BACKUP_DIR -name "schema_*.sql" -mtime +30 -delete
Complete Backup & Restore Workflow
Backup Before DROP
export DBCLI_CONNECTION="Data Source=app.db"
dbcli export-schema trigger -o backup_triggers.sql
cat backup_triggers.sql
dbcli ddl "DROP TRIGGER update_timestamp"
dbcli export-schema trigger
Restore from Backup
TRIGGER_SQL=$(grep -A 10 "CREATE TRIGGER" backup_triggers.sql | sed '/^GO$/q')
dbcli ddl "$TRIGGER_SQL"
dbcli ddl -F backup_triggers.sql
dbcli export-schema trigger
Output Format
The exported SQL script includes:
CREATE PROCEDURE ProcedureName...
GO
CREATE FUNCTION FunctionName...
GO
CREATE TRIGGER TriggerName...
GO
CREATE VIEW ViewName...
GO
CREATE INDEX IndexName ON TableName(Column);
Database Support
| Database | Procedures | Functions | Triggers | Views | Indexes |
|---|
| SQL Server | ✅ | ✅ | ✅ | ✅ | ✅ |
| MySQL | ✅ | ✅ | ✅ | ✅ | ✅ |
| PostgreSQL | ✅ | ✅ | ✅ | ✅ | ✅ |
| SQLite | ❌ | ❌ | ✅ | ✅ | ✅ |
| Oracle | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
| Others | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
Legend:
- ✅ Fully supported
- ⚠️ Partial support (may vary)
- ❌ Not supported
Best Practices
1. Always Backup Before DROP
dbcli ddl "DROP PROCEDURE sp_ImportantLogic"
export DBCLI_CONNECTION="..."
dbcli export-schema procedure --name "sp_ImportantLogic" -o backup.sql
dbcli ddl "DROP PROCEDURE sp_ImportantLogic"
2. Use Timestamped Backups
export DBCLI_CONNECTION="..."
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
dbcli export-schema all -o "schema_backup_${TIMESTAMP}.sql"
3. Store Backups in Version Control
export DBCLI_CONNECTION="..."
dbcli export-schema all -o "database/schema/procedures.sql"
git add database/schema/procedures.sql
git commit -m "Backup procedures before refactoring"
4. Automate Daily Backups
0 2 * * * /usr/local/bin/dbcli --config /etc/dbcli.json export-schema all -o /backups/schema_$(date +\%Y\%m\%d).sql
5. Test Restore Procedures
export DBCLI_CONNECTION="..."
dbcli export-schema trigger -o test_backup.sql
dbcli ddl "DROP TRIGGER test_trigger"
Error Handling
Common Errors
-
Connection Failed
Error: Unable to connect to database
- Check connection string
- Verify database type (
-t option)
- Ensure database server is running
-
No Objects Found
-- Stored Procedures
-- (empty)
- Normal if no objects exist
- Check database type compatibility
- Verify name filter pattern
-
Permission Denied
Error: Permission denied to read schema
- Ensure database user has SELECT permissions on system tables
- SQL Server: SELECT on sys.procedures, sys.sql_modules
- MySQL: SELECT on INFORMATION_SCHEMA.ROUTINES
- PostgreSQL: SELECT on pg_proc, pg_trigger
Integration with Other Skills
With dbcli-procedure
export DBCLI_CONNECTION="..."
dbcli export-schema procedure -o backup.sql
dbcli ddl "ALTER PROCEDURE..."
With dbcli-index
export DBCLI_CONNECTION="..."
dbcli export-schema index -o backup.sql
dbcli ddl "DROP INDEX..."
With dbcli-exec
export DBCLI_CONNECTION="..."
dbcli export-schema trigger -o backup.sql
dbcli exec "DELETE FROM..."
Configuration
Using Config File
{
"ConnectionString": "Server=.;Database=mydb;Trusted_Connection=True",
"DbType": "sqlserver"
}
dbcli export-schema all -o backup.sql
Environment Variables
export DBCLI_CONNECTION="Server=.;Database=mydb;Trusted_Connection=True"
export DBCLI_DBTYPE="sqlserver"
dbcli export-schema all
Database DDL Extraction Capabilities
Different databases have varying levels of built-in support for extracting DDL (Data Definition Language):
| Database | Native GET_DDL Support | Common Method |
|---|
| Oracle | ✅ Yes | DBMS_METADATA.GET_DDL |
| DaMeng | ✅ Yes | DBMS_METADATA.GET_DDL |
| Snowflake | ✅ Yes | GET_DDL(...) |
| MySQL / MariaDB / TiDB | ✅ Yes (different syntax) | SHOW CREATE TABLE/VIEW/... |
| PostgreSQL | ❌ No unified function | pg_get_viewdef, pg_dump |
| Microsoft SQL Server | ❌ No native function | OBJECT_DEFINITION, sp_helptext |
| SQLite | ❌ No native function | sqlite_master table |
| IBM DB2 | ❌ No unified function | db2look utility |
Note: DbCli abstracts these differences and provides unified export-schema command across all supported databases. The implementation internally uses the appropriate method for each database type.
Tips & Tricks
1. Compare Schema Changes
export DBCLI_CONNECTION="..."
dbcli export-schema procedure -o procedures_before.sql
dbcli export-schema procedure -o procedures_after.sql
diff procedures_before.sql procedures_after.sql
2. Export Multiple Types
export DBCLI_CONNECTION="..."
for type in procedure function trigger view index; do
dbcli export-schema $type -o "backup_${type}.sql"
done
3. Grep for Specific Objects
export DBCLI_CONNECTION="..."
dbcli export-schema procedure | grep -i "user"
4. Create Deployment Package
#!/bin/bash
export DBCLI_CONNECTION="..."
mkdir -p deployment/schema
dbcli export-schema procedure -o deployment/schema/procedures.sql
dbcli export-schema function -o deployment/schema/functions.sql
dbcli export-schema trigger -o deployment/schema/triggers.sql
dbcli export-schema view -o deployment/schema/views.sql
dbcli export-schema index -o deployment/schema/indexes.sql
tar -czf schema_deployment.tar.gz deployment/
License
MIT License - See LICENSE file for details