标签: jsonb

如何使用rails form和jsonb postgres

我正在考虑在Rails4.2和Postgres4.1中使用新的jsonb功能.

我正在寻找创建一个代表用户配置文件(即技能集等)的模型,并将整个事物存储在单个jsonb数据集中.

所以表格会有:

id int
profile jsonb
timestamps
Run Code Online (Sandbox Code Playgroud)

我以为我基本上可以将所有配置文件数据存储在jsonb结构中,如下所示(这只是一个示例/概念):

{
  "basics": {
    "name": "John Doe",
    "label": "Programmer",
    "picture": "",
    "email": "john@gmail.com",
    "phone": "(912) 555-4321",
    "website": "http://johndoe.com",
    "summary": "A summary of John Doe...",
    "location": {
      "address": "2712 Broadway St",
      "postalCode": "CA 94115",
      "city": "San Francisco",
      "countryCode": "US",
      "region": "California"
    },
    "profiles": [{
      "network": "Twitter",
      "username": "john",
      "url": "http://twitter.com/john"
    }]
  },
"skills": [{
    "name": "Web Development",
    "level": "Master",
    "keywords": [
      "HTML",
      "CSS",
      "Javascript"
    ]
  }],
  "languages": [{
    "language": "English",
    "fluency": "Native speaker" …
Run Code Online (Sandbox Code Playgroud)

postgresql json ruby-on-rails ruby-on-rails-4 jsonb

9
推荐指数
2
解决办法
2259
查看次数

jsonb查询与数组中的嵌套对象

我正在使用PostgreSQL 9.4,其中teams包含一个jsonb名为的列的表json.我正在寻找一个查询,我可以让所有拥有球员的球队3,4以及7他们的球员阵容.

该表包含两行,包含以下json数据:

第一排:

{
    "id": 1,
    "name": "foobar",
    "members": {
        "coach": {
            "id": 1,
            "name": "A dude"
        },
        "players": [
            {
                "id": 2,
                "name": "B dude"
            },
            {
                "id": 3,
                "name": "C dude"
            },
            {
                "id": 4,
                "name": "D dude"
            },
            {
                "id": 6,
                "name": "F dude"
            },
            {
                "id": 7,
                "name": "G dude"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

第二排:

{
    "id": 2,
    "name": "bazbar",
    "members": …
Run Code Online (Sandbox Code Playgroud)

sql postgresql relational-division jsonb postgresql-9.4

9
推荐指数
1
解决办法
4092
查看次数

如何索引jsonb整数值

我正在尝试使用"newish"JSONB类型.

我有一个documents带有propertiesjsonb字段的表,在那里是一个字段publication_year.我想查找一年范围内的所有文件记录,例如2013-2015. [编辑:查询一系列值是这里的主要挑战,即使我使用了下面的完全匹配示例.请求的方法也适用于美元范围(价格> 20美元,价格<40美元)或时间戳范围).

我试过了:

create index test1 on documents using gin ((cast(properties->'announced_on_year' as integer)));

ERROR:  cannot cast type jsonb to integer
Run Code Online (Sandbox Code Playgroud)

以及:

create index test1 on documents using gin (cast(properties->>'publication_year' as integer));

ERROR:  data type integer has no default operator class for access method "gin"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.`
Run Code Online (Sandbox Code Playgroud)

我从这篇文章中看到http://www.postgresql.org/message-id/10736.1409063604@sss.pgh.pa.us这应该是可能的,但我无法弄清楚正确的语法.

当我只做一个简单的索引:

create index test1 on …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing gwt-gin jsonb

9
推荐指数
2
解决办法
4593
查看次数

PostgreSQL比较两个jsonb对象

使用PostgreSQL(v9.5),JSONB格式提供了很棒的机会.但现在我陷入了一个看似简单的操作;

比较两个jsonb对象; 看一个文档中哪个与另一个文档相比有什么不同或缺失.

到目前为止我有什么

WITH reports(id,DATA) AS (
          VALUES (1,'{"a":"aaa", "b":"bbb", "c":"ccc"}'::jsonb),
                 (2,'{"a":"aaa", "b":"jjj", "d":"ddd"}'::jsonb) )
SELECT jsonb_object_agg(anon_1.key, anon_1.value)
FROM
  (SELECT anon_2.key AS KEY,
      reports.data -> anon_2.KEY AS value
   FROM reports,
     (SELECT DISTINCT jsonb_object_keys(reports.data) AS KEY
      FROM reports) AS anon_2
   ORDER BY reports.id DESC) AS anon_1
Run Code Online (Sandbox Code Playgroud)

应该返回第1行与第2行的差异:

'{"b":"bbb", "c":"ccc", "d":null}'
Run Code Online (Sandbox Code Playgroud)

相反,它也返回duplicates({"a": "aaa"}).也; 一般来说可能会有更优雅的方法!

postgresql jsonb postgresql-9.5

9
推荐指数
3
解决办法
8472
查看次数

Postgres使用JSONB插入冲突

我正在尝试使用Postgres作为文档存储,当我试图有效地插入Postgres解析器似乎不喜欢JSONB运算符的文档时遇到了问题.

我有一张桌子:

CREATE TABLE tbl (data jsonb NOT NULL);
CREATE UNIQUE INDEX ON tbl ((data->>'a'));
Run Code Online (Sandbox Code Playgroud)

我尝试插入数据:

INSERT INTO tbl (data) VALUES ('{ "a": "b" }'::jsonb) 
  ON CONFLICT (data->>a) 
  DO UPDATE SET data = data || '{ "a": "b" }'::jsonb
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

ERROR:  syntax error at or near "->>"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过数据 - >> a,data - >>'a',data-> a,也许数据 - >'a'.所有这些都是

我想将标识符列(示例中的a)保留在JSON中,而不是将其作为表中的列.

我目前正在尝试做什么?

postgresql jsonb

9
推荐指数
1
解决办法
2154
查看次数

从postgres表中提取json数组会产生错误:无法从标量中提取元素

通过使用jsonb_array_elements()函数jsonb从Postgres中提取数据数组,它给出了错误:

不能从标量中提取元素

我认为这是因为NULL在返回调用中,添加了NULL检查条件但不起作用.任何帮助赞赏.

   select id ,
   CASE
    WHEN report IS NULL OR 
         (report->'stats_by_date') IS NULL OR 
         (report->'stats_by_date'-> 'date') IS NULL then to_json(0)::jsonb
    ELSE jsonb_array_elements(report -> 'stats_by_date' -> 'date') 
    END AS Date
   from factor_reports_table
Run Code Online (Sandbox Code Playgroud)

截断的json数组看起来像:

"stats_by_date":{"date":[16632,16633,16634,...],"imps":[2418,896,1005 ......],...}

arrays postgresql json jsonb

9
推荐指数
1
解决办法
1万
查看次数

使用RubyOnRails验证jsonb对象数组中的对象

如何使用Rails验证对象数组中的每个对象?

我正在我们的Rails应用程序中构建用户配置文件表单.在用户模型内部,我们有基本的字符串属性,但也有一些jsonb字段.JSONb字段默认为[]因为我们想要在该属性中存储对象数组.以下是简化用户模型属性的示例:

  • name: string
  • email: string
  • education: jsonb, default: []

教育是一系列对象,例如:

[{
  school: 'Harvard university',
  degree: 'Computer Science',
  from_date: 'Tue, 11 Jul 2017 16:22:12 +0200`,
  to_date: 'Tue, 11 Jul 2017 16:22:12 +0200'
},{
  school: 'High school',
  degree: 'Whatever',
  from_date: 'Tue, 11 Jul 2017 16:22:12 +0200`,
  to_date: 'Tue, 11 Jul 2017 16:22:12 +0200'
}]
Run Code Online (Sandbox Code Playgroud)

用户应该能够单击Add school按钮,通过jquery添加更多字段.那个jquery部分对于这个问题并不重要 - 可能只是解释了为什么我们使用了一个对象数组.

你如何验证教育数组中的每个项目,所以我可以用红色标记包含验证错误的文本字段?我被告知使用FormObject模式可能会有所帮助.我也尝试编写继承自ActiveModel::Validator类的自定义验证器,但主要问题仍然在于,我正在处理数组,而不是实际对象.

感谢任何建设性的帮助.

arrays validation ruby-on-rails jsonb

9
推荐指数
1
解决办法
2399
查看次数

是否值得使用Hibernate + PostgreSql JSONB?

我正在研究使用Hibernate 5和PostgreSQL JSONB,但是我遇到了Hibernate正确支持它的问题.

你有任何解决方案,可能是库,如何实现对Hibernate + Spring JPA的JSONB支持?

此外,您可以通过这种方法注意到哪些优点和缺点?

hibernate jpa jsonb

9
推荐指数
3
解决办法
7744
查看次数

如何使用 R2dbc 将 jsonb 从 Postgresql 提取到 Spring webflux

所以我有这个想法,这真的超出了我的想象,因为我只编程了很短一段时间,但我想构建一个反应式 Spring webflux 应用程序,将 json 端点暴露给反应前端。

当我决定在 Postgres 中使用 jsonb 格式时,问题就开始了,因为我认为我可能会从数据库一直到前端层一直使用 json。

当我尝试使用反应式 R2dbc 驱动程序使用 jsonb SELECT 表时,出现以下错误:

Caused by: java.lang.IllegalArgumentException: 3802 is not a valid object id
Run Code Online (Sandbox Code Playgroud)

我在 postgres 中有一个表,如下所示:

Column  |  Type   | Collation | Nullable |           Default
---------+---------+-----------+----------+------------------------------
 id      | integer |           | not null | generated always as identity
 details | jsonb   |           |          |
Indexes:
    "snacks_new_pkey" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)

因此,如果我将其作为文本提取到 Spring webflux,它就可以正常工作,因为它不再是 json。

"SELECT id, details->>'name' as NAME, details->>'price' AS PRICE, details->>'quantity' AS QUANTITY …
Run Code Online (Sandbox Code Playgroud)

java postgresql jsonb spring-webflux r2dbc

8
推荐指数
2
解决办法
9733
查看次数

postgres where 子句中的 JSONB

我有这样的数据 - JSONB数据

所以我需要找出 id=203498 的所有行。我该如何为此编写查询?有帮助吗?

postgresql jsonb

8
推荐指数
1
解决办法
2万
查看次数