MSSQL to HeliosDB Migration Guide
MSSQL to HeliosDB Migration Guide
Version: 1.0 Last Updated: 2025-11-30
Pre-Migration Checklist
- Backup SQL Server database
- Review T-SQL compatibility
- Estimate data volume
- Plan migration window
- Test migration script
Step 1: Export MSSQL Schema
# Export schema using SQL Server Management StudioRight-click Database → Tasks → Generate Scripts
# Or use sqlcmdsqlcmd -S server_name -U username -P password -Q "sp_helptext table_name" > schema.sqlStep 2: Convert T-SQL to SQL
-- Common conversions:
-- MSSQL: IDENTITY → PostgreSQL: SERIAL or GENERATED ALWAYS AS IDENTITY-- MSSQL: [column_name] → PostgreSQL: "column_name"-- MSSQL: NVARCHAR → PostgreSQL: VARCHAR or TEXT-- MSSQL: INT IDENTITY(1,1) → PostgreSQL: SERIAL-- MSSQL: GETDATE() → PostgreSQL: CURRENT_TIMESTAMP-- MSSQL: ISNULL(col, val) → PostgreSQL: COALESCE(col, val)-- MSSQL: CAST(x AS INT) → PostgreSQL: CAST(x AS INTEGER)-- MSSQL: TOP N → PostgreSQL: LIMIT NStep 3: Export Data
# Export to CSV using BCPbcp "SELECT * FROM TableName" queryout "table.csv" -S server_name -T -c -t,
# Or use SQL Server Integration Services (SSIS)Step 4: Import into HeliosDB
-- Create table in HeliosDB first-- Then import dataCOPY table_name FROM '/path/to/table.csv' WITH (FORMAT csv);
-- VerifySELECT COUNT(*) FROM table_name;Step 5: Migrate Stored Procedures
-- MSSQL procedures with differences:
-- MSSQL CREATE PROCEDURECREATE PROCEDURE usp_GetCustomers @country NVARCHAR(50) AS SELECT * FROM Customers WHERE Country = @country
-- PostgreSQL equivalentCREATE FUNCTION get_customers(country VARCHAR) RETURNS TABLE(...) AS $$ SELECT * FROM customers WHERE country_name = $1;$$ LANGUAGE SQL;Step 6: Migrate Triggers
-- MSSQL CREATE TRIGGERCREATE TRIGGER trg_UpdateCustomer ON Customers AFTER UPDATE AS BEGIN UPDATE OrderCount SET count = count + 1 END
-- PostgreSQL equivalentCREATE TRIGGER trg_update_customer AFTER UPDATE ON customers FOR EACH ROW EXECUTE FUNCTION update_customer_trigger();
CREATE FUNCTION update_customer_trigger() RETURNS TRIGGER AS $$BEGIN UPDATE order_count SET count = count + 1; RETURN NEW;END;$$ LANGUAGE plpgsql;Common Compatibility Issues
| MSSQL | HeliosDB Solution |
|---|---|
XML type | Use XML or JSONB |
UNIQUEIDENTIFIER | Use UUID type |
DATETIME2 | Use TIMESTAMP |
DECIMAL(18,2) | Use NUMERIC(18,2) |
BIT (0/1) | Use BOOLEAN |
CTE (WITH) | Fully supported ✓ |
Step 7: Testing
-- Compare row countsSELECT COUNT(*) FROM table_name;
-- Validate sample dataSELECT TOP 100 * FROM table_name;
-- Test queriesSELECT * FROM table_name WHERE condition;Migration Strategy
Option 1: Cut-over (downtime required)
1. Stop applications2. Export from MSSQL3. Import to HeliosDB4. Test5. Switch applicationsOption 2: Parallel run (no downtime)
1. Dual-write to both databases2. Sync data continuously3. Validate on HeliosDB4. Switch when readyPerformance Tuning
-- After migrationANALYZE;VACUUM FULL;
-- Create indexesCREATE INDEX idx_name ON table_name(column_name);
-- Enable caching for hot tablesALTER TABLE frequently_accessed ENABLE INTELLIGENT_CACHING;Post-Migration Verification
- Row count matches
- Indexes created
- Triggers migrated
- Stored procedures tested
- Query performance validated
- Application tested end-to-end
Related Documentation: