【问题标题】:PG::Error : result has been cleared rails serilizationPG::Error : 结果已被清除 rails 序列化
【发布时间】:2018-06-18 11:24:25
【问题描述】:

在我的数据库中,我们在一列中有一个序列化值,如下所示

考虑表是test,归档是meta

---------------------------------------------------------------------
ID          Name                meta
------------------------------------------------------------------------
726345      test               - :status: :success
                                 :result: !ruby/object:PG::Result {}
-------------------------------------------------------------------------

在使用活动记录Test.select('meta').where(:id=> 726345)编写查询时

它抛出的错误是:PG::Error Exception: result has been cleared

对于 remaning 列的名称和 ID 工作正常。我发现结果键有错误,但我不知道如何解决这个问题。

有什么帮助吗??

Rails - 5.1,ruby - 2.2.5,mysql - 5.6

提前致谢

【问题讨论】:

  • 看起来数据库中的 Result 对象是一个空对象。
  • @RaymondNijland 不,那个元字段来自数据库,它有状态和结果键
  • 添加一些 ruby​​-on-rails 代码后,您可能会更清楚。
  • @RaymondNijland 您还需要什么数据?我还没有写任何红宝石代码。我有测试模型。我只是在做 Test.select('meta').where(:id=> 726345)。它正在抛出错误
  • 您是如何将这些数据保存在示例数据中的?确定一定是 ruby​​-on-rail 代码吧?

标签: mysql ruby-on-rails ruby activerecord serialization


【解决方案1】:

在写入时,您序列化了空的 PG::Result 对象。查询时,rails 尝试使用PG::Result.new 对其进行反序列化,但失败

> PG::Result.new

PG::Error: result has been cleared

要解决此问题,您只需清除该列即可。无论如何,它没有实际用途。

我真的不明白你为什么从结果 postgtresql 序列化到 mysql,虽然

【讨论】:

  • 感谢您的解释,我的数据库中有很多记录具有相同的 PG::Result 对象,一些列有带键的对象,一些列像上面一样是空的。即使 PG::Result 对象为空,您能否建议我正确的查询方法
  • @shakeel 抱歉,没有时间。我会在几个小时内回复解决方法
  • 谢谢你,等待回复
  • @shakeel 抱歉让您久等了。希望这个问题仍然相关。我又看了一遍。转换为 yaml 的 any PG::Result 似乎为空。我是否正确理解您的元数据,除了PG::Result 之外还有很多其他数据,您不能简单地删除列?
  • 是的,例如,如果我运行connection.exec("select * from table");,那么PG::Result 不会为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多