feat: update migrate
to be transactional
#1128
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
migrate
command runs migrations one at a time, stopping until the last one that could be fully and successfully completed.However, GoTrue is exclusively built with PostgreSQL in mind, which supports transactional DDL statements. As we've seen operating many thousands of GoTrue instances in the wild, it's much more useful for migrations between release
A
andA'
to run fully or none at all. Thus themigrate
command is refactored to run the migrations within a transaction block.If the migrations are not able to run all at once, the command will exit with
123
which can be used as a special signal to operators that the transition from releaseA
toA'
is not compatible; and releaseA
can continue to safely run.