当前位置: 首页 > 知识库问答 >
问题:

如何使用新的PostgreSQL JSON数据类型中的字段进行查询?

韩羽
2023-03-14

我正在为PostgreSQL 9.2中的新JSON函数寻找一些文档和/或示例。

具体来说,给定一系列JSON记录:

[
  {name: "Toby", occupation: "Software Engineer"},
  {name: "Zaphod", occupation: "Galactic President"}
]

如何编写SQL来按名称查找记录?

在香草SQL中:

SELECT * from json_data WHERE "name" = "Toby"

官方开发手册非常稀少:

  • http://www.postgresql.org/docs/devel/static/datatype-json.html
  • http://www.postgresql.org/docs/devel/static/functions-json.html

我总结了一个要点,详细说明了PostgreSQL 9.2目前可能实现的功能。使用一些自定义函数,可以执行以下操作:

SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';

我现在已经将我的JSON函数移动到它们自己的项目中:

PostSQL——将PostgreSQL和PL/v8转换为一个非常棒的JSON文档存储的一组函数

共有3个答案

龙俭
2023-03-14

与postgres 9.3使用-

seed.rb

se = SmartElement.new
se.data = 
{
    params:
    [
        {
            type: 1,
            code: 1,
            value: 2012,
            description: 'year of producction'
        },
        {
            type: 1,
            code: 2,
            value: 30,
            description: 'length'
        }
    ]
}

se.save

rails c

SELECT data->'params'->0 as data FROM smart_elements;

返回

                                 data
----------------------------------------------------------------------
 {"type":1,"code":1,"value":2012,"description":"year of producction"}
(1 row)

你可以继续筑巢

SELECT data->'params'->0->'type' as data FROM smart_elements;

回来

 data
------
 1
(1 row)
凤高翰
2023-03-14

使用Postgres 9.3,只需使用-

选择数据-

见http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/一些很好的例子和教程。

司空宗清
2023-03-14

我引用pgsql黑客名单上的安德鲁·邓斯坦的话:

在某个阶段可能会有一些json处理(与json生成相反)函数,但在9.2中没有。

这并不妨碍他在PLV8中提供一个示例实现来解决您的问题。(链接现在已关闭,请参见现代PLV8。)

提供了一系列新的函数和操作符来添加“json处理”。

  • 关于新JSON功能的手册
  • Postgres Wiki介绍了第9.3页中的新功能

Postgres 9.3中原始问题的答案:

SELECT *
FROM   json_array_elements(
  '[{"name": "Toby", "occupation": "Software Engineer"},
    {"name": "Zaphod", "occupation": "Galactic President"} ]'
  ) AS elem
WHERE elem->>'name' = 'Toby';

高级示例:

  • 使用JSON数据类型中的嵌套记录数组查询组合

对于较大的表,您可能希望添加表达式索引以提高性能:

  • 在JSON数组中查找元素的索引

为这两种类型添加了jsonb(b代表“二进制”,值存储为原生Postgres类型)和更多功能。除了上面提到的表达式索引,jsonb还支持GIN、btree和hash索引,GIN是其中最强大的。

  • 关于jsonjsonb数据类型和函数的手册

手册甚至建议:

一般来说,大多数应用程序应该更喜欢将JSON数据存储为jsonb,除非有非常特殊的需求,例如关于对象键排序的遗留假设。

我的。

性能受益于GIN索引的一般改进。

完成jsonb函数和运算符。添加更多功能以就地操作jsonb并进行显示。

  • Postgres 9.5发行说明中的主要好消息。
 类似资料:
  • 问题内容: 我正在寻找PostgreSQL 9.2中新JSON函数的一些文档和/或示例。 具体来说,给定一系列JSON记录: 如何编写SQL以按名称查找记录? 在原始SQL中: 官方开发手册非常稀疏: http://www.postgresql.org/docs/devel/static/datatype-json.html http://www.postgresql.org/docs/devel

  • 问题内容: 使用postgresql 9.3,我可以选择JSON数据类型的特定字段,但是如何使用UPDATE修改它们呢?我在postgresql文档中或在线上找不到任何示例。我尝试了明显的方法: 问题答案: 更新 :在PostgreSQL 9.5中 ,PostgreSQL本身具有一些操纵功能(但对于;没有;操纵值需要强制转换)。 合并2个(或更多)JSON对象(或串联数组): 因此,可以使用以下命

  • 我正在用spring数据创建一个带有空日期检查的spel动态查询。我的疑问是: 当我使用有效日期运行此查询时,它可以工作,但当我传递空日期时,我会得到以下错误: 堆栈跟踪:

  • 问题内容: 我有以下存储过程,没有编写完整的存储过程,但其中一些是: 我想知道何时我将@course转换为VARCHAR类型,而数据库中的我是INT类型-比较如何进行? 问题答案: 在SQL Server中,两种不同类型之间的比较是这样进行的: 首先,根据数据类型优先级的规则比较这两种类型的优先级: 优先级较低的数据类型将转换为优先级较高的数据类型 接下来,将优先级较低的类型强制转换为优先级较高的

  • 所以,我的程序中有公司和员工实体。雇员为公司工作,在雇员表中有company_id(外键),我跟踪某些雇员为哪个公司工作。现在,如果我想更新该字段,如何更改公司员工正在工作? 我想更新员工类中的company_id,使用字段int companyId来引用该列,但是它不起作用。在员工服务实施中。类如果我想更新该列(这意味着员工不是为公司工作,或员工更改了公司),我必须调用公司类,这不是我想在员工表