activerecord-postgres-hstore после сохранения порядка ошибок в Hash

сохранить как хеш-таблицу с 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

Это потому, что после сериализации он заказывает по дереву. Любые идеи или кто-нибудь сталкивался с этой проблемой раньше? Заранее спасибо.


person Thaichor Seng    schedule 15.02.2013    source источник


Ответы (1)


Из отличного руководства по PostgreSQL:

F.16. hstore
[...]
Этот модуль реализует тип данных hstore для хранения наборов пар ключ/значение в одном значении PostgreSQL.
[...]
Порядок пар не имеет значения (и может не воспроизводиться на выходе).

Таким образом, тип hstore в PostgreSQL представляет собой неупорядоченный набор пар ключ/значение, который не гарантирует какого-либо определенного порядка пар ключ/значение. Как только ваш Ruby Hash преобразуется в hstore, порядок теряется.

Если вам нужно поддерживать порядок в вашем хеше, вам придется использовать другой формат сериализации.

person mu is too short    schedule 15.02.2013
comment
Я пытался использовать Hstore для хранения пользовательских заголовков/значений для CSV, который я создавал. Однако, прочитав это, я решил вместо этого хранить их в двух отдельных массивах. - person bhaity; 15.08.2015