Fix import of saved json[b] fields for postgres #594
Merged
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.
Well,
activerecord-import
silently corrupted a tons of the data on my server 💣Fortunately, that was a staging one, and it's possible to revert this time 🍀 😃
How that happened:
jsonb
postgres field - without default value (don't ask me why 😞), withoutserialize
norstore_accessor
definition on model layer.ActiveRecord.import
withon_duplicate_key_update
turned on.jsonb
field. But...jsonb
field was not changed -activerecord-import
will take it fromAR#read_attribute_before_type_cast
. As a result in DB it will replace the originaljsonb
object with that object serialized to JSON twice. Postgres will silently accepts that, because such string is valid JSON string...{"a": "b"}
JSON object, till"\"\\\"{\\\\\\\"a\\\\\\\": \\\\\\\"b\\\\\\\"}\\\"\""
and further! 🚀The fix is similar to 2a6158d. It fixes pure
json
case as well.