Database Support
Supported:- PostgreSQL
- MySQL (5.7 and 8.0)
- SQL Server
- Oracle
- MongoDB
- Other databases
Supported SQL Statements
- PostgreSQL
- MySQL
Only these PostgreSQL statements are supported:
CREATE TABLECREATE INDEX/CREATE UNIQUE INDEXCREATE VIEWCREATE SEQUENCECREATE FUNCTIONALTER SEQUENCE(for OWNED BY)
- Complex stored procedures
- Triggers
- Row-level security policies
- DML operations (INSERT, UPDATE, DELETE)
- Transaction control
- Database-level settings
Strict Syntax Requirements
- PostgreSQL
- MySQL
PostgreSQL SDL requires strict adherence to conventions:
-
All objects must use fully qualified names (with schema prefix)
-
PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK must be table-level with explicit names
-
Only NOT NULL, DEFAULT, GENERATED allowed at column level
-
Foreign key references must be fully qualified
-
All indexes must have explicit names
MySQL Considerations
- CHECK constraints require MySQL 8.0.16+: MySQL 5.7 parses and ignores CHECK constraints, so they are not compared on 5.7.
- DEFINER is not managed:
DEFINERclauses are omitted from the export and ignored in comparison. - Session context is preserved for routines, triggers, and events only: functions, procedures, triggers, and events keep their original
sql_modeand character-set context when recreated; events also keep theirtime_zone. Views do not carry session context. - Column renames are drop + add: renaming a column in an SDL file generates
DROP COLUMN+ADD COLUMN, which loses the column’s data. Use migration-based workflow for renames. - Partition changes regenerate the whole clause: any change to a table’s partitioning emits a full
ALTER TABLE ... PARTITION BY ...(orREMOVE PARTITIONING), not incrementalADD/DROP PARTITIONstatements. - Trigger ordering is not tracked:
FOLLOWS/PRECEDESclauses are not part of the comparison. - Event start times are normalized: MySQL stores an implicit
STARTStimestamp on every recurring event, so a change that only modifies an explicitSTARTSvalue is not detected as a diff.
No Direct Data Operations
SDL only manages schema structure. For data operations, use migration-based workflow. Not supported in SDL:- INSERT statements
- UPDATE statements
- DELETE statements
- Data transformation logic
Destructive Operations
SDL-generated DROP statements execute automatically when objects are removed from files:Limited Rollback
SDL only moves forward to new desired states:- No automatic rollback generation
- To rollback: revert SDL files to previous state and redeploy
- Data in dropped objects is lost (backup required)
Schema Rollback Strategies
Approaches for reversing schema changes
Performance Considerations
For large schemas:- Initial SDL adoption requires exporting complete schema
- State comparison time increases with schema complexity
- DDL generation uses topological sort (handles dependencies)
- Organize schema into multiple files
- Use database groups for fleet management
- Test SDL workflow on staging first
Next Steps
Migration-Based Workflow
Learn about the imperative alternative
Best Practices
Production-ready workflow patterns
Troubleshooting
Solutions for common issues
GitOps Overview
Return to GitOps overview

