问题标签 [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.
arrays - Postgres - 从 jsonb 数组中删除元素
我有一个jsonb
元素数组(jsonb[]
),带有 id 和文本。要删除我可以使用的元素:
UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')
但我想仅通过 id 删除消息,因为获取消息将花费我另一个查询。
postgresql - 如何更新 PostgreSQL 中的 jsonb 列的字段?
所以我想试试jsonb
PostgreSQL。在我的表中,我有一个名为typeextras
的列。jsonb
样本数据extras
看起来像{"param1": 10, "param2": 15}
我想只使用 sql 语句修改 JSON。我想做这样的事情:
如果超过 12 param1
,则通过将 10 添加到其值来更新extras
字段。param2
extras
我怎样才能写出这样的 SQL 语句?我知道我可以在应用程序层轻松地做到这一点,但我想在 SQL 层本身做到这一点,因为我可能要处理的行数会很大,我不想在 db-application- 上浪费时间db 往返
json - 索引 jsonb 用于字段的数字比较
我已经定义了一个简单的表
它包含带有键的数据(从一个大集合中提取)和 1 到 100 之间的值,例如:
我想搜索其值(与特定键关联)大于某个基准值的条目。我可以做到这一点,例如通过:
...但当然这不使用索引,而是使用表扫描。我想知道是否有:
- 一种更有效的方式来查询“polled”>50 的资源
- 一种构建支持此类查询的索引的方法
json - 如何对 jsonb 键执行 LIKE 查询?
我有以下 jsonb 结构:
如何选择包含 LIKE 运算符的行?
返回 0 行...希望它能匹配 'this_that' 和 'this_and_that'。(注意:“_”后面的字符可能会有很大差异,因此我无法进行精确匹配)。
postgresql - 处理来自 jsonb_each 查询的记录类型
我将一些数据存储为 JSON。我想使用 jsonb_each 展平数据。新的列类型是 RECORD,但我不知道如何从中提取值。
输出是
类型是记录。
我想做一个聚合和 GROUPBY,但我不知道如何提取第一个元素(字符串)和第二个元素(值)。
postgresql - 错误:类型时间戳的无效输入语法:“end_time”
postgresql 的新手,jsonb 的新手。我正在尝试过滤一组对象:
我的查询:
我得到错误:
postgresql - 如何在postgresSQL中jsonb值的array_agg中组合DISTINCT和ORDER BY
注意:我使用的是最新版本的 Postgres (9.4)
我正在尝试编写一个查询,它对 2 个表进行简单的连接,并按第一个表的主键进行分组,并对第二个表中的几个字段进行 array_agg,我希望将其作为对象返回。该数组需要通过 json 对象中的 2 个字段的组合进行排序,并且也是唯一的。
到目前为止,我想出了以下几点:
这导致每个动物园有一行,有一个 jsonb 对象的聚合数组,每个动物一个,唯一。
但是,我似乎无法弄清楚如何通过代码注释部分中的参数对其进行排序。
如果我取出不同的,我可以按原始字段排序,效果很好,但是我有重复项。
python - “创建索引”返回事务的“回滚”
SqlAlchemy 会话被定义为:
并被配置:
并且需要使用在事务中执行原始 sql 为 jsonb 字段创建索引:
该操作的 SqlAlchemy 日志如下所示:
并且没有创建索引。
但是相同的 SQL 命令psql
创建索引没有错误:
在这种情况下如何使用 SqlAlchemy“执行”命令创建索引?
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 相同,即在我的情况下没有帮助。
php - 带有参数化查询的 jsonb 存在运算符
...或问号问题。
我目前正在使用新的 jsonb 类型在 php 中实现 postgres 数据库的搜索功能。
为了实现这一点,我正在使用命名占位符执行准备好的语句。
但是,在尝试使用一些新的 postgres JSON 包含和存在运算符以及命名占位符时,我遇到了一个有趣的问题。
问题的基础是运算符本身使用问号?
作为其语法的一部分。IE
?
JSON 值中是否存在键/元素字符串?
?|
这些键/元素字符串是否存在?
?&
所有这些键/元素字符串都存在吗?
这意味着我在 PHP 中有类似这样的语句。
这失败了,因为问号被解释为占位符。为了解决这个问题,我试图让操作符本身成为一个命名参数,就像这样。
然而,这只会引发与使用裸运算符相同的错误,即
ERROR: syntax error at or near \"$1\"1
有没有其他人遇到过这个问题,或者有人能想到一个好的解决方法吗?
有没有办法转义或传递问号,以便可以将 postgres jsonb 包含和存在运算符与 PDO 参数化查询一起使用?