Могу ли я хранить массивы в hstore с помощью Rails
Я хочу сохранить данные следующим образом:
User.create(name:"Guy", properties:{url:["url1","url2","url3"], street_address:"asdf"})
Могу ли я сделать это в Rails 4? До сих пор я пробовал миграцию:
add_column :users, :properties, :hstore, array: true
Но когда я сохраняю массив в hstore, он возвращает ошибку:
PG::InvalidTextRepresentation: ERROR: array value must start with "{" or dimension information
Ответы
Ответ 1
hstore
предназначен для простого хранения ключей/значений, где оба ключа и значения - это простые неструктурированные строки. Из точное руководство:
F.16. hstore
Этот модуль реализует тип данных store
для хранения наборов пар ключ/значение в пределах одного значения PostgreSQL. [...] Ключи и значения - это просто текстовые строки.
Обратите внимание на последнее предложение: ключи и значения в hstore
являются строками. Это означает, что вы не можете поместить массив в значение hstore
без какой-либо привязки, чтобы преобразовать массив в строку и из нее, и вы действительно не хотите вмешиваться в подобные вещи.
Однако существует
Ответ 2
Добавьте ответ Mu. Hstore также дает очень многообещающее обновление через несколько месяцев (Postgresql 9.4 начнется в 3 квартале 2014 года).
Некоторые выделяют предстоящие изменения, которые должны учитывать эти ограничения:
- Поддержка скаляров и типов (числовые, логические, строки, NULL)
поддержка, а также новые соответствующие операторы
- Поддержка вложений и массивов (авторы предлагают выход
формат, то есть скобки с фигурными фигурными скобками, с GUC
переменные)
- По существу, полная совместимость между hstore и JSON, поэтому JSON
документы теперь могут в полной мере использовать индексы hstores (с GIN
в частности, авторы запустили 120-кратное повышение скорости для
JSON)
Очень сложно выбрать между hstore и json прямо сейчас. Потому что они просто слишком похожи и обновляются слишком быстро.
Ответ 3
Мои 2 цента, чтобы ответить Му. Я отправляю это как ответ, потому что у меня недостаточно репутации, чтобы добавить комментарий.
JSON становится готовым решением для хранения "сложных" данных.
Олег Бартунов, один из авторов hstore, сам заявил, что нет преимуществ с использованием hstore над JSON, и он поощряет людей использовать jsonb.
23 марта 2014 года jsonb, структурированный формат для хранения json, был официально представлен в списке рассылки разработки pgsql.
15 мая 2014 года JSONB был включен в объявление PostgreSQL 9.4 Beta 1..
JSONB: 9.4 включает новый JSONB "двоичный JSON". Этот новый формат хранения данных документа является более высокопроизводительным и включает в себя индексирование, функции и операторы для управления данными JSON.