无法将text[]值赋给pgsql中的变量

问题描述 投票:0回答:1
raise notice 'output %', arr[i]->>val;
data_ = arr[i]->>val::text[];

提出通知给出正确的输出

["cust_full_name","cust_email"]

但是当第二行执行时出现错误

SQL Error [42883]: ERROR: operator does not exist: json ->> text[]
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

其中 data_ 是文本[]类型并且 arr[i]->>val => val 是变量,它包含对象的动态键,该对象是字符串。

我正在尝试在过程函数的pgsql中执行上述语句。

我尝试了 pgsql 的各种内置方法,但没有一个有效,例如

data_ = jsonb_array_elements(arr[i]->>val);
data_ = jsonb_array_elements_text(arr[i]->>val);
postgresql plpgsql procedure
1个回答
0
投票

您可能打算做

(arr[i]->>val)::text[]
,而不是
arr[i]->>(val::text[])
?但这也不起作用,如果
arr[i]->>val
是 JSON 数组的文本表示,这将不是 postgres 文本数组的有效表示 - 您仍然会得到运行时异常,因为它无法解析为文字.

如果

data_
应具有类型
json(b)
,那么您应该使用
->
而不是
->>

data_ = arr[i] -> val;

如果

data_
应具有类型
text[]
,那么您需要从 JSON 数组的字符串元素创建一个 postgres 数组:

data_ = ARRAY(SELECT value FROM json_array_elements_text(arr[i] -> val));
© www.soinside.com 2019 - 2024. All rights reserved.