Iva*_*ang 21 arrays postgresql ruby-on-rails hstore ruby-on-rails-4
我想保存这样的数据:
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
mu *_*ort 28
hstore用于简单的键/值存储,其中键和值都是简单的非结构化字符串.从精细手册:
F.16.hstore
此模块实现
store用于在单个PostgreSQL值中存储键/值对集合的数据类型.[...]键和值只是文本字符串.
注意最后一句:键和值hstore是字符串.这意味着你不能将一个数组放在一个hstore值中,如果没有一些手持操作来将数组转换为字符串和从字符串转换数组,你真的不想乱搞那种东西.
但是,有一种JSON数据类型可用:
8.14.JSON类型
该
json数据类型可以被用来存储JSON(JavaScript对象符号)的数据,如在RFC 4627中指定.
和JSON可以轻松处理嵌入式数组和对象.请尝试使用JSON:
add_column :users, :properties, :json
Run Code Online (Sandbox Code Playgroud)
您必须首先删除旧hstore列.
此外,你不想要array: true你的hstore列,因为你没有存储一个hstores 数组,你只需要其中一个.
我对穆的回答是2美分.我发布这个作为答案,因为我没有足够的声誉来添加评论.
JSON正在成为存储"复杂"数据的首选解决方案.
Oleg Bartunov-- hstore的作者之一 - 他自己说使用hstore而不是JSON没有优势,他鼓励人们使用jsonb.
2014年3月23日,用于存储json的结构化格式jsonb在pgsql开发邮件列表中正式引入.
2014年5月15日,JSONB被列入PostgreSQL 9.4 Beta 1发布公告.
JSONB:9.4包含新的JSONB"二进制JSON"类型.这种用于文档数据的新存储格式具有更高的性能,并带有用于操作JSON数据的索引,函数和运算符.