# README
dsync 
Getting Started
go get github.com/SharkFourSix/dsync
Usage
- Choose a data source (check in sources) or implement your own.
- Create a
Migrator
and pass the data source to the migrator
import (
"embed"
"testing"
"github.com/SharkFourSix/dsync"
"github.com/SharkFourSix/dsync/sources/postgresql"
)
//go:embed resources/migrations
var efs embed.FS
func DoMigrate(){
dsn := "postgres://postgres:toor@localhost:5433/test-db"
// Create a migrator
var migrator dsync.Migrator
// Configure a data source
ds, err := postgresql.New(dsn, &dsync.Config{
FileSystem: efs,
Basepath: BASEPATH,
TableName: "dsync_schema_migration",
})
if err != nil {
panic(err)
}
// Migrate
err = migrator.Migrate(ds)
if err != nil {
panic(err)
return
}
}
Things To Know
-
File names must use the following convention to be included when scanning:
\d+__\w+.sql
. -
An error will be returned otherwise when the version part of the file name does not contain a number.
-
A migration script will not be included if it does not end with .sql extension
-
Migrations are only recorded in the database when successfull
-
Custom migration table name to allow different migrations for difference DB clients.
-
Supports out of order migrations
Database sources
Database | Data source | Status |
---|---|---|
Postgres | github.com/SharkFourSix/dsync/sources/postgresql | Done |
MySQL | github.com/SharkFourSix/dsync/sources/mysql | Done |
SQLite | github.com/SharkFourSix/dsync/sources/sqlite | Done |
TODO
- Add logging and configuration
# Functions
ExtractVersion Extract version from a migration changeset file.
HashFile Calculate file content checksum using CRC32(IEEE).
Migrate Perform a quick migration.
ParseMigration Parse migration information from file name.
SortDirectoryEntries Sorts the slice in place using the library's naming scheme.
No description provided by the author
# Constants
No description provided by the author
# Structs
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Interfaces
No description provided by the author