Skip to content
This repository has been archived by the owner on Jun 28, 2018. It is now read-only.

Support go migrations #344

Open
denismakogon opened this issue Mar 3, 2018 · 4 comments
Open

Support go migrations #344

denismakogon opened this issue Mar 3, 2018 · 4 comments

Comments

@denismakogon
Copy link

SQL migrations is a good thing, but likely useless in many cases. Migrate must support go migrations, i.e a function that accepts an instance of the database or a transaction object (in case of SQL datastores).
Something along the lines of this to up the version:

func up(tx *sql.Tx) error {
         _, err := tx.Exec("ALTER TABLE calls ADD stats text;")
	return err
}

down also looks the same:

func down(tx *sql.Tx) error {
	_, err := tx.Exec("ALTER TABLE calls DROP COLUMN stats;")
	return err
}
@rubens21
Copy link

Hey @denismakogon, could you please describe a case where the SQL is useless.
My team is comparing migrations tools, and I would like to consider your comment.

Thanks.

@denismakogon
Copy link
Author

@rubens21 so, here's the thing, if i have a system with a lot of migrations applied and i have to apply changes to multiple tables in one query (image bunch of resources tight down with a lot cross-references), so, in order to make things work i need to update one table with an appropriate field with a value that, imagine, comes from 3rd-party service.

So, most of the complex migrations can't fit into one *.sql file, so i need to write some go code in the migrations, that is more than necessary. We ended up having our own simple SQL migrations framework: https://github.com/fnproject/fn/tree/master/api/datastore/sql/migratex

@denismakogon
Copy link
Author

Moreover, you can't write SQL migration with altering the column and make it work on sqlite3, you need to create a new table with modifications applied, copy the data from an old table, delete old table, etc.

@rubens21
Copy link

Thank so much for such fast and detailed response.
That's a very specific case, but I do agree we have more common cases where a programmatic migration would be much easier than SQL statements.
Thank, I will check that project out.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants