Go to file
Роман Бородин 219ddb634f Изменил(а) на 'README.md' 2022-09-16 13:36:29 +03:00
LICENSE Added LICENSE 2020-04-02 17:26:18 +05:00
README.md Изменил(а) на 'README.md' 2022-09-16 13:36:29 +03:00
go.mod Изменил(а) на 'go.mod' 2022-09-16 13:36:08 +03:00
go.sum first commit 2020-04-02 16:52:36 +05:00
template.go first commit 2020-04-02 16:52:36 +05:00

README.md

Templating for Migration Sources

migrate-template a wrapper for migration sources of library golang-migrate/migrate that allows the use of variables in migrations files.

Use in your Go project


import (
	template "git.ukamnya.ru/ukamnya/migrate-template"
	"github.com/golang-migrate/migrate/v4"
	"github.com/golang-migrate/migrate/v4/source"
)

func main() {
	sourceInstance, err := source.Open("file://migration")
	
	templateInstance := template.Wrap(
		sourceInstance,
		template.WithVars(template.M{
			"cluster": "cluster_name",
			"replicated_path": "/clickhouse/tables/db_name",
		}),
	)

	m, err := migrate.NewWithSourceInstance(
		"template", templateInstance,
		"clickhouse://...",
	)
	m.Steps(1)
}

Migration template using variables:


CREATE TABLE table_name ON CLUSTER {{.cluster}} (
	foo Int64,
	bar String
) ENGINE = ReplicatedReplacingMergeTree('{{.replicated_path}}.table_name', '{replica}')

Result:


CREATE TABLE table_name ON CLUSTER cluster_name (
	foo Int64,
	bar String
) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/db_name.table_name', '{replica}')