如何访问 JSONb 的内部表示?

Pet*_*uss 3 postgresql jsonb

在大数据查询中,中介“CAST to text”是一个性能瓶颈......在 JSONb 数据类型上有很好的二进制信息:如何挽救它?

典型的“选择位置”示例:

 with t(x,j) as (select 'hello','{"flag1":true,"flag2":false}'::jsonb) 
 SELECT x FROM t 
 WHERE (j->>'flag1')::boolean AND NOT((j->>'flag2')::boolean)
Run Code Online (Sandbox Code Playgroud)

“转换为文本”是性能的一大损失。Ideal 是一种直接执行的机制,从 JSONb 到 Boolean,例如

 WHERE (j->'flag1')::magic_boolean AND NOT((j->'flag2')::magic_boolean)
Run Code Online (Sandbox Code Playgroud)

PS:可以使用C++吗?可能一个CREATE CASTC ++实现,以解决这个问题?

kli*_*lin 5

该功能在Postgres 11 中实现

E.4.3.4. 数据类型

[...]

将 JSONB 标量的转换添加到数字和布尔数据类型 (Anastasia Lubennikova)

Db<>小提琴。