问题标签 [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 - UPSERT 测试代码中的语法错误
我正在尝试使用以下测试代码测试新的 PostgreSQL upsert 语法,但得到语法错误:
请问上面的代码为什么会失败?
此外,该test1
表有几个约束(非负值和唯一主键)。如何仅解决唯一性约束?
更新 2:我已经从 to 切换UPDATE
到INSERT
(对不起这个愚蠢的错误!),但我仍然在语法上苦苦挣扎:
我还尝试将 JSON 行更改为:
但这也失败了......
为方便起见,这是我的测试代码:
json - PostgreSQL。json_object_agg() 返回文本字符串而不是 json 对象
正如这里所写,json_object_agg(name, value)
返回类型是json
. 同时,如果我返回json_object_agg()
从存储过程返回的值:
并在另一个函数中调用它:
我无法获得JSON
对象字段。我遇到:
错误:运算符不存在:文本 ->> 未知
并提出通知显示数据类型为text
.
注意:数据类型文本
我试图将_getlocales()
返回类型更改为jsonb
,但没有任何改变:
为什么会发生这种情况?
postgresql - 将 JSONB_ARRAY_ELEMENTS 与 WHERE ... IN 条件一起使用
在线扑克玩家可以选择购买游戏室 1 或游戏室 2 的访问权限。
他们可以因作弊而被暂时禁止。
这里上表填充了4条测试记录:
所有 4 条记录都属于同一个人 - 通过不同的社交网络(例如通过 Facebook、Twitter、Apple Game Center 等)验证了自己的身份
我正在尝试创建一个存储函数,该函数将获取数字用户 ID 列表(作为 JSON 数组)并将属于同一个人的记录合并到一条记录中 - 而不会丢失她的付款或惩罚:
不幸的是,它的使用会导致以下错误:
请帮我解决问题。
为了您的方便,这里有一个 SQL 代码要点。
arrays - 将 JSONB_ARRAY_ELEMENTS 结果分配给 VARCHAR 数组
当尝试将JSONB_ARRAY_ELEMENTS调用的结果分配给VARCHAR 数组(供以后在SELECT ... WHERE IN (UNNEST(...))
语句中使用)时,以下存储函数:
不幸的是打印错误:
所以我试图通过使用ARRAY_AGG来修复分配-
但得到语法错误:
请问如何将JSONB_ARRAY_ELEMENTS
结果存储到数组中?
更新:
我听从了尼克的建议(谢谢),但现在卡在下一步:
尝试在SELECT ... WHERE IN ...
语句中使用数组时:
json - 在子选择中过滤 jsonb 结果
我正在从多个表构建分层 JSON 结果。这些只是示例,但对于本演示的目的来说应该足以理解这个想法:
测试数据:
我创建了以下功能:
执行函数book_get
产生以下结果
现在我可以用一个WHERE
子句过滤数据,例如
我如何才能过滤authors
?例如,等同于WHERE _b.authors.'name' = 'Arthur C. Clarke'
.
我完全不知道会authors
变成什么类型?或者是?它仍然是一个记录(数组)吗?已经是 JSON 了吗?我猜是因为我可以访问id
,访问不是这样的问题吗title
?pages
_b.authors
访问_b.authors
给了我ERROR: missing FROM-clause entry for table "authors"
使用 JSON 运算符访问_b.authors->>..
或_b->authors->>..
给我
我记得使用GROUP BY
withHAVING
子句:
但这给了我错误:
错误:无法识别 json 类型的相等运算符
为了更清楚一点:
基本上会做我需要的,这只有在索引上的作者0
是Arthur C. Clarke
. 如果他与人合写了这本书并且他会排在第二位(索引 1),那么就不会有比赛了。所以我试图找到的是正确的扫描语法,_b.authors
它恰好是一个由作者填充的 JSON 数组。它只是不接受任何尝试。据我了解@>
,#>
仅支持JSONB
. 那么如何在_b.authors
针对值的任何列上进行选择时获得正确的语法。
更新 2
好的,再次阅读文档......似乎我没有从 Postgres 文档中得到关于 JSON 和 JSONB 在函数方面存在差异的部分,我认为这仅与数据类型有关。在where子句中使用诸如 etc 之to_json
类的to_jsonb
运算符似乎可以解决问题。@>
更新 3
@ErwinBrandstetter:有道理。LATERAL 我还不知道,很高兴知道它的存在。我掌握了 JSON/JSONB 的函数和运算符,现在对我来说很有意义。我不清楚的是在子句中找到LIKE
例如出现的情况。WHERE
如果我需要jsonb_array_elements
在数组中取消嵌套对象(因为在最后的WHERE
子句中,内容b.authors
是 JSONB 数据类型)。然后我可以做
并得到想要的结果,
WHERE
但是在我的示例中,在最后(最后)子句中实现这一目标的方法是什么?指出最后一个WHERE
子句,因为我想过滤完整的结果集,而不是在子选择中间的某个地方部分过滤。所以总的来说,我想在最终结果集中过滤掉作者中间名为“C”的书籍。或名字“亚瑟”。
更新 4
当然是在FROM
条款中。当我找出所有可能性时,我将不得不在最后进行性能调整,但这就是我想出的。
将给出作者姓名以“亚瑟”开头的所有书籍。我仍然感谢对这种方法的评论或更新。
python - 这个 SQL 语句有 django ORM 版本吗?
使用 Django 1.9 和 Postgres 9.4。
我有一个名为 .jsonb 的字段json_field
。json_field
可以包含title
看起来像'the cow jumped over the moon'
.
所以我想搜索title
包含的行moon
。
它使用以下原始 SQL 正常工作
SELECT * FROM web_file where (json_field ->> 'title')::text LIKE '%moon%';
但我宁愿使用 Django ORM。
编辑:
我想尝试(正如@kloddant 所指出的那样)
但它给出了以下错误
这是相关的models.py
这可能是 django 模型和 MPTTModel 之间的冲突,尽管我对此表示怀疑?
postgresql - 在 postgresql 视图/函数中合并两个 json 对象
我在 postgress 中有以下 3 个表...
而地址组件具有类似...的数据
员工可以有多个地址,每个地址与一个地址组件相关联。
我希望将地址作为 json 并将 address_component 作为嵌入在地址对象中的另一个 json。
有了这个,我能够正确地将地址数组作为 json 获取,而我暂时将地址组件作为单独的结果。你能帮我把这个 address_component json 合并到 address json 数组的单个元素中,得到如下所示的输出吗?
json - 更新postgres json中数组中的每个值
在我的 postgres 数据库中,我的 json 看起来类似于:
现在我想重命名myValue
为otherValue
. 我不能确定数组的长度!最好我想使用set_jsonb
通配符之类的东西作为数组索引,但这似乎不受支持。那么最好的解决方案是什么?
postgresql - 带有查询生成器的值数组的 JSON Where 子句
data
这是表列中的 JSON 值things
:
我可以使用这样的原始查询获取所有things
包含b
等于 1 的 a :
我知道我们可以使用 Laravel 使用带有 JSON where 子句的 Laravel 运行查询:https ://laravel.com/docs/5.4/queries#json-where-clauses 。我可以写如下内容:
但是我可以用 Laravel 的 Query Builder 写一个 where 来检查是否a
包含{b: 1}
就像在原始查询中一样吗?
postgresql - 如何从 JSON 填充嵌套复合类型并插入到表中
我正在尝试将复杂的 JSON 转换为复合类型。这是一个例子
这工作正常。
现在我试图通过首先将 JSON 数组填充到复合类型中然后将其插入来将其插入表中。PostgreSQL 函数抛出一个奇怪的错误。
这只是我分享的一个示例,实际的 JSON 是从其他几个函数生成的。所以我需要修复 JSON,然后将其作为复合类型插入到表中。真正接近但没有被插入的一个是: -
请注意我必须如何将数组转换为 PostgreSQL 喜欢的 JSON 兼容数组,但这仍然不起作用,因为存在类型转换问题。
所以,我真的想在这里解决两个问题:-
如何将 JSON 转换为 json_populate_recordset 喜欢的兼容 JSON,即复杂的 JSON 被序列化为一个类型(在我们的例子中是 ty)。
尝试转换和插入类型数组时如何解决类型转换问题。