我已经创建了一个接受json的函数。下面是查询
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}';这就是我调用这个函数的方式
select * from data_get ('{"text":"my"}'::json) as info; 这个很好用
现在我想要传递数组元素,所以我像这样添加了变量
DECLARE
declare
_text text;
_ids bigint[];并从json访问,如下所示
_ids = data::json#>>'{ids}';但是当我调用这个函数时
select * from data_get ('{"text":"","ids":[1]}'::json) as info;它显示了
ERROR: malformed array literal: "[1]"
DETAIL: Missing "=" after array dimensions.
CONTEXT: PL/pgSQL function posts_get(json) line 18 at assignment
SQL state: 22P02如何调用此函数?
发布于 2021-11-13 07:25:08
Postgres不执行从json数组到postgres数组的隐式转换。
您需要使用自己的函数:
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)https://stackoverflow.com/questions/69952119
复制相似问题