问题标签 [jsonb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3233 浏览

arrays - Postgres - 从 jsonb 数组中删除元素

我有一个jsonb元素数组(jsonb[]),带有 id 和文本。要删除我可以使用的元素:

UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')

但我想仅通过 id 删除消息,因为获取消息将花费我另一个查询。

0 投票
2 回答
8347 浏览

postgresql - 如何更新 PostgreSQL 中的 jsonb 列的字段?

所以我想试试jsonbPostgreSQL。在我的表中,我有一个名为typeextras的列。jsonb

样本数据extras看起来像{"param1": 10, "param2": 15}

我想只使用 sql 语句修改 JSON。我想做这样的事情:

如果超过 12 param1,则通过将 10 添加到其值来更新extras字段。param2extras

我怎样才能写出这样的 SQL 语句?我知道我可以在应用程序层轻松地做到这一点,但我想在 SQL 层本身做到这一点,因为我可能要处理的行数会很大,我不想在 db-application- 上浪费时间db 往返

0 投票
1 回答
2074 浏览

json - 索引 jsonb 用于字段的数字比较

我已经定义了一个简单的表

它包含带有键的数据(从一个大集合中提取)和 1 到 100 之间的值,例如:

我想搜索其值(与特定键关联)大于某个基准值的条目。我可以做到这一点,例如通过:

...但当然这不使用索引,而是使用表扫描。我想知道是否有:

  1. 一种更有效的方式来查询“polled”>50 的资源
  2. 一种构建支持此类查询的索引的方法
0 投票
1 回答
8449 浏览

json - 如何对 jsonb 键执行 LIKE 查询?

我有以下 jsonb 结构:

如何选择包含 LIKE 运算符的行?

返回 0 行...希望它能匹配 'this_that' 和 'this_and_that'。(注意:“_”后面的字符可能会有很大差异,因此我无法进行精确匹配)。

0 投票
1 回答
517 浏览

postgresql - 处理来自 jsonb_each 查询的记录类型

我将一些数据存储为 JSON。我想使用 jsonb_each 展平数据。新的列类型是 RECORD,但我不知道如何从中提取值。

输出是

类型是记录。

我想做一个聚合和 GROUPBY,但我不知道如何提取第一个元素(字符串)和第二个元素(值)。

0 投票
1 回答
11657 浏览

postgresql - 错误:类型时间戳的无效输入语法:“end_time”

postgresql 的新手,jsonb 的新手。我正在尝试过滤一组对象:

我的查询:

我得到错误:

0 投票
1 回答
3197 浏览

postgresql - 如何在postgresSQL中jsonb值的array_agg中组合DISTINCT和ORDER BY

注意:我使用的是最新版本的 Postgres (9.4)

我正在尝试编写一个查询,它对 2 个表进行简单的连接,并按第一个表的主键进行分组,并对第二个表中的几个字段进行 array_agg,我希望将其作为对象返回。该数组需要通过 json 对象中的 2 个字段的组合进行排序,并且也是唯一的。

到目前为止,我想出了以下几点:

这导致每个动物园有一行,有一个 jsonb 对象的聚合数组,每个动物一个,唯一。

但是,我似乎无法弄清楚如何通过代码注释部分中的参数对其进行排序。

如果我取出不同的,我可以按原始字段排序,效果很好,但是我有重复项。

0 投票
1 回答
365 浏览

python - “创建索引”返回事务的“回滚”

SqlAlchemy 会话被定义为:

并被配置:

并且需要使用在事务中执行原始 sql 为 jsonb 字段创建索引:

该操作的 SqlAlchemy 日志如下所示:

并且没有创建索引。

但是相同的 SQL 命令psql创建索引没有错误:

在这种情况下如何使用 SqlAlchemy“执行”命令创建索引?

0 投票
2 回答
3601 浏览

postgresql - 更快地从大型 jsonb 字段中检索多个值(postgresql 9.4)

tl;博士

使用 PSQL 9.4,有没有一种方法可以从 jsonb 字段中检索多个值,例如使用虚构函数:

希望加快选择多个值所需的几乎线性时间(1 个值 = 300 毫秒,2 个值 = 450 毫秒,3 个值 = 600 毫秒)

背景

我有以下 jsonb 表:

大约有 100 000 行,其中每行都有一个 jsonb 字典,其中包含 90 多个键和相应的值。我正在尝试编写一个 SQL 查询以相当快速的方式(< 500 ms)选择几个(< 10)键+值

索引和查询:190ms

我首先添加了一个索引:

这使得基于“x”字典中的值的查询快速,例如:

这需要大约 190 毫秒(我们可以接受)

检索字典值

但是,一旦我开始在 SELECT 部分添加要返回的键,执行时间几乎呈线性增长:

1个值:300ms

耗时 366 毫秒(+175 毫秒)

耗时 300 毫秒(+110 毫秒)

3个值:600ms

需要 600 毫秒(+410,或 +100,每个选定的值)

需要 600 毫秒(+410,或 +100,每个选定的值)

更快地检索更多值

有没有办法从 jsonb 字段中检索多个值,例如使用虚构函数:

这可能会加快这些查找速度。它可以将它们作为列或列表/数组甚至 json 对象返回。

使用 PL/Python 检索数组

只是为了它,我使用 PL/Python 制作了一个自定义函数,但这要慢得多(5s+),可能是由于 json.loads:

2015-05-21 更新

我使用带有 GIN 索引的 hstore 重新实现了表,性能几乎与使用 jsonb 相同,即在我的情况下没有帮助。

0 投票
1 回答
2802 浏览

php - 带有参数化查询的 jsonb 存在运算符

...或问号问题。

我目前正在使用新的 jsonb 类型在 php 中实现 postgres 数据库的搜索功能。

为了实现这一点,我正在使用命名占位符执行准备好的语句。

但是,在尝试使用一些新的 postgres JSON 包含和存在运算符以及命名占位符时,我遇到了一个有趣的问题。

问题的基础是运算符本身使用问号?作为其语法的一部分。IE

?JSON 值中是否存在键/元素字符串?

?|这些键/元素字符串是否存在?

?&所有这些键/元素字符串都存在吗?

这意味着我在 PHP 中有类似这样的语句。

这失败了,因为问号被解释为占位符。为了解决这个问题,我试图让操作符本身成为一个命名参数,就像这样。

然而,这只会引发与使用裸运算符相同的错误,即

ERROR: syntax error at or near \"$1\"1

有没有其他人遇到过这个问题,或者有人能想到一个好的解决方法吗?

有没有办法转义或传递问号,以便可以将 postgres jsonb 包含和存在运算符与 PDO 参数化查询一起使用?