问题标签 [postgresql-json]
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.
postgresql - PostgreSQL JSONB 数组 - 查找键是否存在
该表在 PostgreSQL 9.6 中Product
有一个 jsonb 列attributes
,并包含该attributes
列的以下条目。
记录 1:
记录 2:
我们如何过滤包含KEY4
密钥的记录?此处给出的 jsonb 运算符不提供 jsonb 数组的详细信息。
postgresql - PostgreSQL JSONB - 如何匹配空字符串键
表架构:
样本数据:
SQL查询:
我想调整到上述查询以匹配以下场景:
- 查找带有空字符串的键:例如:
"": "VALUE1"
- 只用单引号查找键:例如:
"''": "VALUE1"
- 查找尾随空格用单引号括起来的键:例如:
"'KEY1 '": "VALUE1"
试图转义引号和空格,但查询未返回预期结果。
更新 1:
python - Django Postgresql JsonField 查询相关字典键
我拥有的使用 Django Model 字段的模型的一部分如下所示:
下面是 JsonData 字段的格式:
即,格式为:
目前我可以使用 ID 的 val 过滤 Django 表。我现在想知道那个特定 ID 的贡献。
例如,如果 val = 1,我想过滤具有 id = 1 的 JsonField 的模型SalesModel,并且我想显示相关的贡献。因此,这意味着,在 3 个可能的字典中(根据字段构造),我只会显示一个字典(由该字典的“ID”键过滤)。这意味着,如果第二个字典具有匹配的 ID,则仅显示第二个贡献,如果第一个 ID 匹配,则仅显示第一个贡献,对于第三个字典也是如此。
有没有办法可以做到?
sql - 从 PostgreSQL 表中选择一个 JSON 数组对象
我准备了一个简单的SQL Fiddle来演示我的问题 -
在一个两人游戏中,我将用户聊天存储在一个表中:
在这里,我用一个简单的测试数据填充表格:
我可以通过运行 SELECT 查询来获取数据:
它返回一个 JSON 数组:
这接近我需要的,但是我想使用“gid”作为 JSON 对象属性,其余数据作为该对象中的值:
请通过使用PostgreSQL JSON 函数来实现吗?
sql - 尝试 ORDER BY 时间戳时,ARRAY_AGG 被 GROUP BY 中断
我为我的问题准备了一个SQL Fiddle -
给定下表:
填充以下测试数据:
我可以使用以下查询:
用于以“gid”作为键和数组值的 JSON 对象获取表记录:
但是我错过了一件小事,只是想不通:
我需要通过“创建”来订购数组。
所以我添加ORDER BY created ASC
到上面的查询中,也必须添加GROUP BY gid, created
(你可以看到上面查询中注释掉的有问题的代码)。
然而,这会破坏array_agg
并导致 1 元素数组(并覆盖重复的“gid”键,当jsonb
从我的自定义存储函数返回时):
甚至可以在这里订购还是我应该在我的 JAVA 应用程序中订购?
sql - 将 LIMIT 添加到 ARRAY_TO_JSON 或 ARRAY_AGG
在使用 PostgreSQL 9.6.6 作为后端的 2 人游戏中,我定义了以下自定义存储函数来检索用户的聊天消息:
它连接 words_games 和 words_chat 表并生成以下 JSON 对象(游戏 id “9”作为字符串键),其中包含带有消息的 JSON 数组:
这很好用,但我想增加LIMIT 10
数组元素的数量 - 作为防止聊天泛滥的措施。
我已经尝试将它添加到函数中(请参阅上面的注释行),但它没有效果。
你能建议正确的地点LIMIT 10
吗?
我通过 WebSockets 将 JSON 对象发送到 Android 应用程序,并希望防止恶意用户通过充斥聊天来破坏此类对象的大小。
更新:
我正在尝试迈克的建议:
但不幸的是得到语法错误:
更新 2:
这是我使用的两张表,抱歉之前没有包含该信息 -
postgresql - 从查询结果中获取 jsonb 字段名称
我有两个这样的表:
我正在用这个选择查询创建一个物化视图
这个选择查询的问题是当我添加一个新属性时,我必须将它添加到选择查询中才能创建一个最新的物化视图。
有没有办法编写一个聚合表达式来动态获取属性而无需所有这些硬编码的属性名称?
您可以在 SQL Fiddle 中尝试我的代码:http ://sqlfiddle.com/#!17/c4150/4
postgresql - 从 JSON 数组中提取元素并将它们作为连接字符串返回
PostgreSQL 10 表包含 JSON 数据,例如(这里是SQL Fiddle):
如何仅提取“字母”值并将它们连接到一个字符串,如
我想最后我应该使用ARRAY_TO_STRING函数,但是使用哪个JSON 函数将“字母”值提取到数组中?
更新:
在非常有用的 PostgreSQL 邮件列表中也得到了提示:
sql - 转换为 JSON 时如何使用行列的子集?
我有一个t
包含一些列的表a
,b
并且c
。我使用以下查询将行转换为 JSON 对象数组:
这将按预期返回:
现在我想要相同的结果,但只有列a
和b
输出。我仍将使用列c
进行排序。我想出的最好的方法如下:
虽然这很好用,但我想知道是否有更优雅的方法来做到这一点。让我感到沮丧的是,我必须手动定义 JSON 属性。当然,我知道我必须枚举列a
和b
,但奇怪的是我必须复制/粘贴相应的 JSON 属性名,无论如何这与列名完全相同。
还有另一种方法可以做到这一点吗?
json - row_to_json 给出带有小写字段名称的 JSON
我创建了一个自定义类型,如下所示:
我正在使用此自定义类型my_type
来定义 JSON 正文中的字段名称:
我认为使用自定义类型很有用的原因是,这样,我不必在每个查询中定义 JSON 字段名称(在我的情况下它们与表列名称不同),就像你必须做的那样json_build_object()
.
然而,这里的问题是字段名称现在都是小写的:
我期望:
我怎样才能解决这个问题?我知道这可以通过使用来解决select json_build_object('camelCasedIdentifier', my_table.id) from my_table
,但我宁愿不这样做,因为我将被迫在每个查询中枚举 JSON 字段名称。