Postgres,将 jsonb 结构中的值设置为 return 类型的函数
Postgres, set value in jsonb structure to a return type of a function
我有一个 table 客户,其 DATA 列的类型为 jsonb,其中数据如下所示
{
"ADDRESS": {
"city": "Berlin",
"surname": "BRANDT",
"firstName": "ANA"
}
}
我需要更新所有行中的数据,以便可以预测姓氏的值。
例如假设我有一个带有字符串或 jsonb 对象的函数 scramble(..),我该如何编写一个使用该函数来完成此操作的 UPDATE 语句?也就是说,对于每一行,我想用 scramble(DATA -> 'ADDRESS' -> 'surname')[=21 的 return 值替换姓氏的值=].
我知道 jsonb_set,但我见过的所有示例都明确设置了新值,而不是使用函数。
它应该是这样的:
update customer
set data = jsonb_set(
data,
'{ADDRESS,surname}',
to_jsonb(scramble(data->'ADDRESS'->>'surname')::text)
);
将 return 从 scramble()
转换为 text
可能是不必要的。
此查询可能是您要查找的内容:
WITH customer(data) AS (
VALUES ('{
"ADDRESS": {
"city": "Berlin",
"surname": "BRANDT",
"firstName": "ANA"
}
}'::jsonb)
)
SELECT
jsonb_set(data,'{ADDRESS,surname}',
to_jsonb(lower(data->'ADDRESS'->>'surname')))
FROM customer;
jsonb_set
--------------------------------------------------------------------------
{"ADDRESS": {"city": "Berlin", "surname": "brandt", "firstName": "ANA"}}
(1 Zeile)
注意: lower()
功能只是给你一个想法。将其替换为您的 scrumble()
函数。
我有一个 table 客户,其 DATA 列的类型为 jsonb,其中数据如下所示
{
"ADDRESS": {
"city": "Berlin",
"surname": "BRANDT",
"firstName": "ANA"
}
}
我需要更新所有行中的数据,以便可以预测姓氏的值。
例如假设我有一个带有字符串或 jsonb 对象的函数 scramble(..),我该如何编写一个使用该函数来完成此操作的 UPDATE 语句?也就是说,对于每一行,我想用 scramble(DATA -> 'ADDRESS' -> 'surname')[=21 的 return 值替换姓氏的值=].
我知道 jsonb_set,但我见过的所有示例都明确设置了新值,而不是使用函数。
它应该是这样的:
update customer
set data = jsonb_set(
data,
'{ADDRESS,surname}',
to_jsonb(scramble(data->'ADDRESS'->>'surname')::text)
);
将 return 从 scramble()
转换为 text
可能是不必要的。
此查询可能是您要查找的内容:
WITH customer(data) AS (
VALUES ('{
"ADDRESS": {
"city": "Berlin",
"surname": "BRANDT",
"firstName": "ANA"
}
}'::jsonb)
)
SELECT
jsonb_set(data,'{ADDRESS,surname}',
to_jsonb(lower(data->'ADDRESS'->>'surname')))
FROM customer;
jsonb_set
--------------------------------------------------------------------------
{"ADDRESS": {"city": "Berlin", "surname": "brandt", "firstName": "ANA"}}
(1 Zeile)
注意: lower()
功能只是给你一个想法。将其替换为您的 scrumble()
函数。