保存到PostgreSQL时,二进制数据变得笨拙

我会让这个irb会话进行说话(垃圾省略.... )。

使用一些Marshalled数据创建模型。 user_info是二进制列

 irb(main):011:0> p2 = Provider.create(user_info: Marshal.dump(ActiveSupport::HashWithIndifferentAccess.new({foo: 1, bar: 2})) (0.7ms) BEGIN SQL (11.6ms) INSERT INTO "providers" (...."user_info") VALUES (....$9) RETURNING "id" [.....["user_info", "\x04\bC:-ActiveSupport::HashWithIndifferentAccess{\aI\"\bfoo\x06:\x06EFi\x06I\"\bbar\x06;\x06Fi\a"]] (3.6ms) COMMIT => # 

检查值。 看起来正确:

 irb(main):013:0> p2.user_info => "\x04\bC:-ActiveSupport::HashWithIndifferentAccess{\aI\"\bfoo\x06:\x06EFi\x06I\"\bbar\x06;\x06Fi\a" 

糟糕的事情发生了:在这里我重新加载它,价值完全变成Marshal无法加载的格式

 irb(main):014:0> p2.reload Provider Load (5.3ms) SELECT "providers".* FROM "providers" WHERE "providers"."id" = $1 LIMIT 1 [["id", 98]] => # irb(main):015:0> p2.user_info => "x0408433a2d416374697665537570706f72743a3a4861736857697468496e646966666572656e744163636573737b07492208666f6f063a0645466906492208626172063b06466907" 

在我最近将我的数据库从共享移动到新的免费Dev Postgres之后,此会话在Heroku上运行。

我不确定这是一个heroku问题,一个postgres问题还是一个rails问题。 奇怪的是:我还将同一个应用程序的另一个实例(生产)迁移到新的Dev Posgress,它没有遇到这个问题。 我发现了这个,但它似乎已在多年前修复过。 有人有这方面的经验吗?

更新

看起来我在SO上找到了答案: https : //stackoverflow.com/a/8541304/65311

Heroku的文档解释了如何在其较新的数据库中配置bytea的更改: https : //devcenter.heroku.com/articles/heroku-postgresql#troubleshooting