Don't migrate between text and varchar in Postgres / domains#762
Merged
MaxGabriel merged 4 commits intomasterfrom Jan 4, 2018
Merged
Don't migrate between text and varchar in Postgres / domains#762MaxGabriel merged 4 commits intomasterfrom
MaxGabriel merged 4 commits intomasterfrom
Conversation
* These types are synonyms, with the exact same memory representation in Postgres * So there's no need to suggest migrating from one to the other https://stackoverflow.com/a/4849030/1176156
88f9efa to
12e82a2
Compare
Postgres supports the concept of domains, which are data types with optional constraints. An app might make an "email" domain over the varchar type, with a CHECK that the emails are valid In this case the generated SQL should use the domain name: ALTER TABLE users ALTER COLUMN foo TYPE email Previously the migration code only looked at the underlying type (varchar), and tried to migrate something already of the domain email back to an email.
MaxGabriel
commented
Dec 19, 2017
| type SafeToRemove = Bool | ||
|
|
||
| data AlterColumn = Type SqlType Text | ||
| data AlterColumn = ChangeType SqlType Text |
Member
Author
There was a problem hiding this comment.
In the course of debugging this issue I found it extremely hard to search for Type, so I renamed this to ChangeType.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
My use case is that I have a database not using Persistent for migrations, and I want to use persistent to interact with it. I would also like to check that Persistent's models match the database schema by running
getMigrationand ensuring there are no changes to be made, but if there are spurious migrations then I'll have false positives.In this database,
textis being used instead ofvarchar, so Persistent claims it needs migrations. Sincetextandvarcharare synonyms, this should be unnecessary.Edit:
I found another, similar issue where Persistent would try to migrate a domained type to itself. This needed all the same test infrastructure and has the same theme, so I added it here. This is documented extensively in the comments; see there for details.