Postgresql-在嵌套查询中使用json函数的问题-hstore
我有一个表orders,其中包含hstore类型的字段order_详细信息,用于保存json数据 现在我想查询json数据的内部对象。因为这个查询有点复杂,所以我试图用更简单的场景来说明我的问题 我已经测试了以下4个子查询:Postgresql-在嵌套查询中使用json函数的问题-hstore,sql,json,postgresql,Sql,Json,Postgresql,我有一个表orders,其中包含hstore类型的字段order_详细信息,用于保存json数据 现在我想查询json数据的内部对象。因为这个查询有点复杂,所以我试图用更简单的场景来说明我的问题 我已经测试了以下4个子查询: 获取原始保存的json: select order_detail::json as original from orders; 此查询成功返回json格式的数据 获取订单\u详细信息中的内部对象“transaction”: select order_detail::j
select order_detail::json as original
from orders;
此查询成功返回json格式的数据
select order_detail::json as original,
(order_detail -> 'transaction')::json as transaction
from order_details;
此查询也可以成功运行
select order_detail::json as original,
(order_detail -> 'transaction')::json as transaction,
((order_detail -> 'transaction')::json -> 'id')::text as id
from order_details;
上述操作也可以成功运行,并返回事务中的原始json、事务和id
select original
from
(select order_detail::json as original,
(order_detail -> 'transaction')::json as transaction,
((order_detail -> 'transaction')::json -> 'id')::text as id
from order_details) s
where transaction is null and id is null;
此查询将引发异常!例外情况是:
[22P02]错误有一个令牌“=”无效**
为什么此异常仅出现在4th查询中?有人能帮我吗
最后我发现了问题。当您希望在hstore中存储json字段时,如果使用简单查询,可以使用如下内容:
order_detail -> 'trasaction'
这将毫无问题地返回order_detail字段中散列存储数据的事务部分
但是如果您想在嵌套查询中使用这样的东西,您必须明确声明字段是json。因此,您必须使用类似的内容(在内部查询的所有部分中):
请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并将其作为格式化为表的代码输入。暂停总体目标的工作,将代码切分为第一个表达式,没有给出您期望的内容并说出您期望的内容和原因。如果您使用
hstore\u to\u json()
而不是强制转换?“类型为hstore,可保存json数据”-这没有意义,它是hstore还是json。如果您需要json格式的数据,为什么这不是一个jsonb
或至少是一个json
列呢?谢谢您的回答@a_horse_,没有名字。实际上数据库不是我的。我只是想从中获取一些报告,尽管我不能使用其他数据类型。主要问题是:为什么使用json的嵌套查询能够成功工作(查询3),但当我想在嵌套查询中使用它的结果时,它会引发异常(查询4)。
order_detail::json -> 'transaction'