我想这样保存数据:

User.create(name:"Guy", properties:{url:["url1","url2","url3"], street_address:"asdf"})

我可以在Rails 4中这样做吗?到目前为止,我已经try 过迁移:

但当我在hstore中保存数组时,它返回错误:

PG::InvalidTextRepresentation: ERROR: array value must start with "{" or dimension information

推荐答案

hstore用于简单的键/值存储,其中键和值都是简单的非 struct 化字符串.从fine manual人中:

F.16. hstore

该模块实现了store种数据类型,用于在单个PostgreSQL值中存储密钥/值对集.[...] 键和值只是文本字符串.

注意最后一句话:hstore中的键和值是字符串.这意味着你不能把一个数组放在一个hstore的值中,如果没有一些把手来将数组与字符串进行转换,你真的不想搞砸这类事情.

但是,有一个JSON data type个可用的:

8.14. JSON Type

json数据类型可用于存储JSON(JavaScript对象表示法)数据,如RFC 4627所述.

JSON可以轻松处理嵌入式数组和对象.try 使用JSON:

add_column :users, :properties, :json

不过,你必须先删除旧的hstore列.

此外,您不希望hstore列上有array: true个,因为您没有存储hstore的数组,您只需要其中一个.

Postgresql相关问答推荐

Postgs密码重置问题

哪种数据类型是除法的结果?

PostgreSQL plpgsql函数问题

docker-compose.yml用于使用postgres的spring-boot应用程序

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

如何将 JSONB 对象数组合并为 PostgreSQL 中的单个对象

PostgreSQL bytea 网络流量双倍预期值

postgres 和 python

Nodemon - 安装期间clean exit - waiting for changes before restart

如何将 DELETE 的返回值插入到 postgresql 中的 INSERT 中?

PostgreSQL CASE 在函数中的使用

错误:CASE types character varying and numeric cannot be matched

从 Select 中创建一个临时表,如果表已经存在则插入

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?

如何判断 PostgreSQL 事务中的待处理操作

获取全文搜索配置语言的完整列表

Array Push的 Postgres 数组追加和数组长度

Postgresql滚动删除旧行?

在 pg_restore 期间排除表

PostgreSQL - GROUP BY 子句或用于聚合函数