Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql JSONB对象字段为数字或布尔值(无需文本转换)_Postgresql_Jsonb - Fatal编程技术网

Postgresql JSONB对象字段为数字或布尔值(无需文本转换)

Postgresql JSONB对象字段为数字或布尔值(无需文本转换),postgresql,jsonb,Postgresql,Jsonb,现在有了a和JSONB类型,预计将使用JSONB作为“PostgreSQL代数”的一部分。。。不是JSONB作为一个“孤立的宇宙” 在性能方面,JSONB比JSON快,因为它在内部比JSON“更强类型”。。。正如“JSON操作比JSONB花费的时间要多得多”。所以JSONB可以更快地转换其布尔、整数和数字类型。。。我们走吧我们不能,为什么不能? 动机 需要一个函数作为get_jsonb_value(jsonb,field,type)(或者一组函数,如jbval_to_int(),jbval_t

现在有了a和JSONB类型,预计将使用JSONB作为“PostgreSQL代数”的一部分。。。不是JSONB作为一个“孤立的宇宙”

在性能方面,JSONB比JSON快,因为它在内部比JSON“更强类型”。。。正如“JSON操作比JSONB花费的时间要多得多”。所以JSONB可以更快地转换其布尔、整数和数字类型。。。我们走吧我们不能,为什么不能?


动机

需要一个函数作为
get_jsonb_value(jsonb,field,type)
(或者一组函数,如
jbval_to_int()
jbval_to_float()
jbval_to_boolean()
),以使用jsonb内部表示,并进行更快的转换


编辑

如果PostgreSQL指南中不存在此类函数(见下面的示例)(存在类似的东西?),并且它不在“下一个pg版本”(它是计划的功能?)。。。对于他们来说,问题是“如何利用内部JSONB表示在C中实现它?”

CREATE FUNCTION jbval_to_numeric(JSONB, varchar) RETURNS numeric AS $f$
  SELECT CASE 
    WHEN jsonb_typeof($1->$2)='number' THEN ($1->>$2)::numeric
    ELSE NULL::numeric 
  END;
$f$ LANGUAGE sql IMMUTABLE;

CREATE FUNCTION jbval_to_float(JSONB, varchar) RETURNS float AS $f$
  SELECT CASE 
    WHEN jsonb_typeof($1->$2)='number' THEN ($1->>$2)::float
    ELSE NULL::float
  END;
$f$ LANGUAGE sql IMMUTABLE;

CREATE FUNCTION jbval_to_int(JSONB, varchar, boolean DEFAULT true) 
RETURNS int AS $f$
  SELECT CASE 
    WHEN jsonb_typeof($1->$2)='number' THEN 
       CASE WHEN $3 THEN ($1->>$2)::int ELSE ($1->>$2)::float::int END
    ELSE NULL::int
  END;
$f$ LANGUAGE sql IMMUTABLE;

CREATE FUNCTION jbval_to_boolean(JSONB, varchar) RETURNS boolean AS $f$
  SELECT CASE 
    WHEN jsonb_typeof($1->$2)='boolean' THEN ($1->>$2)::boolean
    ELSE NULL::boolean 
  END;
$f$ LANGUAGE sql IMMUTABLE;

你的问题是什么?@a_horse_和_no_的名字是关于1)PostgreSQL指南,这个函数在哪里。。。如果这个函数真的不存在,这大概是实现这类函数的最佳方法。。。也许需要C实现。我不知道。。。哪个功能。。。你是说。。。你知道。。。所有的功能。。。有文件证明。。。在。。。手册如果。。。一个函数。。。那里没有记录。。。那么它就不存在了…@a_horse_和_no_的名字PostgreSQL指南太大了,有些混乱,我需要在这里确认一下。。。我需要在这里问一下,这是否会是pg的未来版本。。。但是,对不起,我编辑、刷新您的问题文本。