2

使用 Hstore 存储为哈希表,保存后在哈希中排序错误

class Service < ActiveRecord::Base
  serialize :properties, ActiveRecord::Coders::Hstore
end

service = Service.new
service.properties = { "aaa" => 1, "zz" => 2, "cc" => 3, "d" => 4 }
#=> { "aaa" => 1, "zz" => 2, "cc" => 3, "d" => 4 }
service.save
reload!
service = Service.find(:id)
service.properties
#=> { "d" => "4", "cc" => "3", "zz" => 2, "aaa" => 1 }
Bug::: wrong ordering after save

是不是因为在序列化之后它按树排序。有任何想法或任何人以前遇到过这个问题吗?提前致谢。

4

1 回答 1

4

来自精美的 PostgreSQL 手册

F.16。hstore
[...]
这个模块实现了 hstore 数据类型,用于在单个 PostgreSQL 值中存储键/值对集。
[...]
对的顺序并不重要(并且可能不会在输出中复制)。

所以 PostgreSQL 的 hstore 类型是一组无序的键/值对,不保证键/值对的任何特定顺序。一旦您的 Ruby 哈希转换为 hstore,排序就会丢失。

如果您需要维护 Hash 中的顺序,则必须使用不同的序列化格式。

于 2013-02-15T05:29:37.870 回答