标签: jsonb

SQLAlchemy根据JSONB中的嵌套键进行过滤

我有一个JSONB字段,有时有嵌套键.例:

"a simple text"

如果我这样做, "a simple text"
我会得到这个记录.

如何搜索嵌套密钥的存在?("a simple text")

python sql postgresql sqlalchemy jsonb

7
推荐指数
1
解决办法
8123
查看次数

JSONb日期:内部的实际日期?

我正在使用postgresql jdbc适配器将一堆数据迁移到jsonb字段(postgres 9.4).

导入后,日期字段看起来正确但显示为双引号.有没有办法判断它们是否实际存储在内部作为日期值?如果它们是字符串,我认为范围查找不会非常有效.

例如,propertiesjsonb字段中的条目如下所示:

"founded_on": "Sep 1, 2012 12:00:00 AM",

我现在可以搜索,比方说,

SELECT CAST(properties->>'founded_on' AS DATE

SELECT extract('year' from cast(properties->>'founded_on' as timestamp))

并且两者都工作正常,但不要告诉我Postgres是否每次都在jsonb字段中重新分析字符串值作为日期.

我可以创建一个索引,我将这些值转换为日期,并使用它来搜索,但它似乎有点不优雅.我真的更愿意知道存储的值是一个日期.整数和浮点数似乎是它们的实际原始值,而不是字符串,如下所示:

shares_sold": 5900000,

"latitude": 33.561467,

任何反馈都高度赞赏.

postgresql date jsonb

7
推荐指数
1
解决办法
6727
查看次数

使用Active Record查询json数组(Rails 4/postgresql9.4)

我有一个Deal模型,它具有一个名为'info'的属性,具有以下结构:

交易中的'info'栏内:

Deal1.info = [{"deal_id":"4","text1":"qqq","text2":"sqsq","image1":"sqqs","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]

# no image here inside the json
Deal2.info = 
[{"deal_id":"4","text1":"qqq","video1":"sqsq"},{"deal_id":"5","text1":"sqqs","text2":"qq"}]
Run Code Online (Sandbox Code Playgroud)

该列在移民中被定义为json

add_column :deals, :info, :json, default: '[]'
Run Code Online (Sandbox Code Playgroud)

如何在jsonb中使用活动记录查询?

  • 查找信息包含至少一个deal_id = 4的所有交易

  • 找到infos包含的所有交易,以及一个名为'image1'的密钥的json块({})(它应该只输出Deal1,而不是deal2)

postgresql json ruby-on-rails rails-postgresql jsonb

7
推荐指数
1
解决办法
2582
查看次数

在Postgres中有效搜索整个1级嵌套JSONB

假设我们需要检查jsonb列是否包含由任何值(非嵌套,仅第一级)中的子字符串匹配的特定值.

如何有效地优化查询以搜索值的整个JSONB列(这意味着每个键)?

是否有一些很好的替代方法可以ILIKE %val%对jsonb数据类型进行文本转换?

jsonb_each_text(jsonb_column) ILIKE '%val%'
Run Code Online (Sandbox Code Playgroud)

作为示例,请考虑以下数据:

SELECT 
  '{
   "col1": "somevalue", 
   "col2": 5.5, 
   "col3": 2016-01-01, 
   "col4": "othervalue", 
   "col5": "yet_another_value"
  }'::JSONB
Run Code Online (Sandbox Code Playgroud)

当需要%val%在包含jsonb列中不同行的不同键配置的记录中搜索模式时,您将如何优化查询?

我知道用前面和后面的%符号搜索是低效的,因此寻找更好的方法,但很难找到一个.此外,显式索引json列中的所有字段不是一个选项,因为它们对于每种类型的记录都有所不同,并且会创建一大组索引(并非每行都有相同的键集).

是否有更好的替代方法可以将每个键值对提取到文本并执行ILIKE/POSIX搜索?

postgresql lookup jsonb postgresql-9.5

7
推荐指数
1
解决办法
642
查看次数

PostgreSQL JSONB - 具有变量键名的查询条件

我已经阅读了各种JSONB教程:

请考虑以下示例.

一张叫做的桌子plans.它包含以下列:

  1. id (整数,自动递增主键).
  2. name (串).
  3. structure (jsonb).

结构列具有常规JSON对象,具有以下结构:

{
  "some_unique_id": {
    "key1": "valueA",   // Fixed key name.
    "key2": "valueB"    // Fixed key name.
  },
  "another_unique_id": {
    "key1": "valueC",   // Fixed key name.
    "key2": "valueB"    // Fixed key name.
  },
  ...                   // can go on up to a 1000 items.
}
Run Code Online (Sandbox Code Playgroud)

注意:最外面的键是动态的.他们改变了每个项目. 这些值只是常规的JSON对象.没什么特别的.

我使用UUID作为结构中的键,因此如果我知道它的UUID,它很容易查找和检索特定值.

另一个选项是使我的结构成为一个对象数组(并将UUID作为值放在每个对象中),如下所示:

[
  {
    "uuid": "some_unique_id",
    "key1": "valueA",   // Fixed key name.
    "key2": "valueB"    // Fixed key …
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

7
推荐指数
1
解决办法
3426
查看次数

查询包含JSON对象数组的jsonb列

我使用PostgreSQL 9.5和Rails 5.我想查询jsonb下面显示的包含JSON对象数组的列,以返回包含的所有JSON数组元素{"kind":"person"}并执行计数.我使用
SQL显示在json数据下面.运行查询只返回一个空数组.

我已经尝试了这里这里建议的查询.

这就是我的jsonb数据:

   '[
        {"kind":"person", "filter_term":"56","selected_attr":"customer"},
        {"kind":"email", "filter_term":"marketer","selected_attr":"job_title"}
      ]'
Run Code Online (Sandbox Code Playgroud)

我想要一个sql查询返回:

                             data
----------------------------------------------------------------------
 '{"kind":"person", "filter_term":"56","selected_attr":"customer"}'
(1 row)
Run Code Online (Sandbox Code Playgroud)

和另一个返回数组的查询,以便我可以在我的应用程序中调用count并在其上循环以创建表单:

 data
----------------------------------------------------------------------
 '[{"kind":"person", "filter_term":"56","selected_attr":"customer"}]'
 (1 row)
Run Code Online (Sandbox Code Playgroud)

我试过这个SQL查询:

 "SELECT * FROM \"segments\" WHERE (payload @> '[{\"kind\":\"person\"}]')"
Run Code Online (Sandbox Code Playgroud)

我也试过这个查询:

  "SELECT payload FROM segments WHERE payload @> '[{\"kind\":\"person\"}]'::jsonb;"
Run Code Online (Sandbox Code Playgroud)

这是第三个查询:

 "SELECT * FROM segments s WHERE s.payload->'\"#{a}\"' @> '[{\"kind\":\"person\"}]';"
Run Code Online (Sandbox Code Playgroud)

该模型:

class Segment < ApplicationRecord
 store_accessor :payload,:kind, :filter_term, :selected_model_name, :selected_attr, :limit, :selected_operator …
Run Code Online (Sandbox Code Playgroud)

sql postgresql ruby-on-rails rails-activerecord jsonb

7
推荐指数
1
解决办法
4965
查看次数

在PostgreSQL中选择jsonb列的值

我有一个表'Documents',其中有一个'Tags'列,'jsonb'数据类型.标签列中的示例数据

 [{"Tag": "Social Media"}, {"Tag": "Adobe Creative"}]
 [{"Tag": "Interactive"}]
 [{"Tag": "Web 2.0"}, {"Tag": "Adobe Creative"},{"Tag": "Suite"}]
Run Code Online (Sandbox Code Playgroud)

我需要得到"标签"的不同值

 Social Media 
 Adobe Creative
 Interactive
 Web 2.0
 Suite
Run Code Online (Sandbox Code Playgroud)

我是PostgreSQL的新手.

postgresql jsonb

7
推荐指数
3
解决办法
6045
查看次数

JSONB列类型

我正在阅读JHipster"创建实体",并没有看到任何与JSONB相关的字段类型.JHipster是否有任何jsonb字段类型的例子?

jhipster jsonb

7
推荐指数
0
解决办法
314
查看次数

如何使用Python将JSONB插入到Postgresql中?

我是python和postgresql的新手

我一直在与使用python硬编码每个json行进行斗争,我不认为这是可扩展的方法.如果有人可以指向我可以处理从python插入json而无需硬编码的文献或文档.

我调查了COPY.

python postgresql json psycopg2 jsonb

7
推荐指数
1
解决办法
4364
查看次数

如何使用来自 PostgreSQL 中另一个表列的值更新 JSONB 列

我有一个源表,如下所示:

公共源代码

Id | part_no | category
1 | 01270-4 | Landscape
2 | 01102-3 | Sports
Run Code Online (Sandbox Code Playgroud)

然后,我有带有 jsonb 列(组合)的目标表,其列表如下;

公共目标

Id | part_no | combinations
7 | 01270-4 | {"subject":""}
8 | 01102-3 | {"subject":""}
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 如何使用 jsonb 列(组合)使用来自源表的值(使用 part_no 列)更新目标表?
输出如下:

Id | part_no | combinations
7 | 01270-4 | {"subject":"Landscape"}
8 | 01102-3 | {"subject":"Sports"}
Run Code Online (Sandbox Code Playgroud)

我尝试了下面但给出了错误:

UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}','s.category',false)
FROM public.source s
WHERE s.part_no = t.part_no;
Run Code Online (Sandbox Code Playgroud)

错误:json 类型的输入语法无效第 2 行:SET 组合 = …

postgresql jsonb

6
推荐指数
1
解决办法
7144
查看次数