Подтвердить что ты не робот

Могу ли я хранить массивы в 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

4b9b3361

Ответ 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.