【问题标题】:plv8 stored procedure with jsonb typejsonb类型的plv8存储过程
【发布时间】:2014-08-21 18:26:31
【问题描述】:

这可能为时过早,postgres 9.4 仍处于测试阶段。我一直在试验 jsonb 类型。我没有任何运气将 jsonb 类型传递给 plv8 函数,它以字符串类型出现。我想知道我是不是做错了?

create or replace function jt ( o json ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'type is ', typeof o);
        plv8.elog(INFO, 'argument is ', o);
        plv8.elog(INFO, 'member is ', o['member']);
$function$;

create or replace function jt ( o jsonb ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'type is ', typeof o);
        plv8.elog(INFO, 'argument is ', o);
        plv8.elog(INFO, 'member is ', o['member']);
$function$;

然后,当我使用 json 运行时:

psql=# select jt('{"member":"test"}'::json);
INFO:  type is  object
INFO:  argument is  [object Object]
INFO:  member is  test

但是,当我使用 jsonb 运行时:

psql=# select jt('{"member":"test"}'::jsonb);
INFO:  type is  string
INFO:  argument is  {"member": "test"}
INFO:  member is  undefined

-g

【问题讨论】:

    标签: postgresql plv8 postgresql-9.4


    【解决方案1】:

    PL/V8 需要添加对 JSONB 的支持才能按您的预期工作。

    与此同时,您仍然可以通过普通的json;只需将jsonb 转换为json

    2015 年以来的新闻

    plv8 项目在 2014 年之后更改为 this comment of the project's sponsor and main contributor, JerrySievert,在 2017 年:

    JSONB 与 JSON 的速度差异众所周知并得到解决,
    JSONB 现在可以在 C++ 中直接转换为 v8 对象,并且比 JSON 转换运行得更快

    last revision history 显示一些关于 JSONb 开始日期的线索:

    • 2015-05-26(1.4.4版)“在函数边界添加jsonb类型强制”

    • 在2019-03-23(2.3.10版)“添加直接jsonb转换选项”,“为jsonb转换添加内存上下文”

    建议将 JSONB 与 plv8 版本 2.3.10 或更高版本一起使用...不过,对于旧版本的 plv8,Jarry confirmed 几乎一切都会好起来的:

    自 2015 年 4 月 22 日起,JSONB 支持一直有效且完整。

    【讨论】:

    • 嗨,请更新...或check if it was really updated
    • @PeterKrauss 请使用您希望显示的信息提出修改建议。我无法跟踪所有内容。请注意 2014 年的回答日期。
    • 嗨,对不起,我卸载了 plv8,没有办法检查经验证据...我正在用新闻编辑你的问题。评论其他读者:请检查(通过性能)它确实是 JSONb 输入,而不是语法糖(自动转换 JSONb::text)。
    • @PeterKrauss 非常感谢,不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多