postgres中的存储过程更新查询



我在表中有文本类型的数据,所以我将其转换为json。根据数据的id,我想更新列的值。


SELECT
CASE
WHEN is_json(data)
THEN data::json #> '{id}'
ELSE
NULL
END
FROM table;
UPDATE table SET hash = md5(
result from above query??
);

某种:

如何编写更新查询?

SELECT 
CASE
WHEN is_json(data)
THEN data::json #> md5('{id}')
ELSE
NULL
END
FROM table;

我有一个json存储在一个文本列中。数据:

{'id': 'e807b554-fd15-4f7c-bbc5-d9531c8174a9','array': ['a'], 'rank': 151}

我的存储过程是:

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
DECLARE
maybe_json json;
BEGIN
BEGIN
maybe_json := input_text;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
RETURN TRUE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

当我选择查询时:

select * from table where is_json(data);

我得到了空排。而数据具有文本形式的json。

这就是您想要的吗?

update mytable 
set hash = md5(case when is_json(data) then data::json #>> '{id}' end)

或者,如果您只想更新包含有效json:的行

update mytable 
set hash = md5(data::json #>> '{id}')
where is_json(data)

最新更新