首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组作为json格式的密钥对传递给函数pgsql

将数组作为json格式的密钥对传递给函数pgsql
EN

Stack Overflow用户
提问于 2021-11-13 06:48:27
回答 1查看 20关注 0票数 0

我已经创建了一个接受json的函数。下面是查询

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION public.data_get(
    data json)
    RETURNS SETOF json 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
    ROWS 1000

AS $BODY$
DECLARE
        declare _text text;
        
    BEGIN
    -- get fields data from json - https://www.postgresql.org/docs/9.3/functions-json.html
    _text = data::json#>>'{text}';

这就是我调用这个函数的方式

代码语言:javascript
运行
复制
select * from data_get ('{"text":"my"}'::json) as info; 

这个很好用

现在我想要传递数组元素,所以我像这样添加了变量

代码语言:javascript
运行
复制
DECLARE
        declare 
           _text text;
           _ids bigint[];

并从json访问,如下所示

代码语言:javascript
运行
复制
_ids = data::json#>>'{ids}';

但是当我调用这个函数时

代码语言:javascript
运行
复制
select * from data_get ('{"text":"","ids":[1]}'::json) as info;

它显示了

代码语言:javascript
运行
复制
ERROR:  malformed array literal: "[1]"
DETAIL:  Missing "=" after array dimensions.
CONTEXT:  PL/pgSQL function posts_get(json) line 18 at assignment
SQL state: 22P02

如何调用此函数?

EN

回答 1

Stack Overflow用户

发布于 2021-11-13 07:25:08

Postgres不执行从json数组到postgres数组的隐式转换。

您需要使用自己的函数:

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION public.json_to_int_array(json)
 RETURNS integer[]
 LANGUAGE sql
AS $function$
SELECT array_agg(v::int) FROM json_array_elements_text($1) g(v)
$function$

postgres=# SELECT public.json_to_int_array(('{"text":"","ids":[1, 2, 3]}'::json)->'ids');
┌───────────────────┐
│ json_to_int_array │
╞═══════════════════╡
│ {1,2,3}           │
└───────────────────┘
(1 row)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69952119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档