尝试以编程方式更新一些关于Citus的日期,我总是
[0A000] ERROR: STABLE functions used in UPDATE queries cannot be called with column references
从这样的查询中
UPDATE date_container SET json_value = json_value::jsonb - 'created_time' || CONCAT('{"created_time":"',
rtrim(replace(to_timestamp(((json_value->>'created_time')::numeric/1000000))::text,' ','T'), '-05'),'"}')::jsonb理论上,所有的方法都是immutable,但出于某些原因,它的某些部分不是。
我还尝试了以下所有方法:PostgreSQL: how to convert from Unix epoch to date?
发布于 2022-04-25 13:12:28
CONCAT函数是stable而不是immutable,这通常是以any/anyelement作为参数的函数的情况。
select proname, pronamespace::regnamespace, provolatile
from pg_proc
where proname = 'concat';
proname │ pronamespace │ provolatile
─────────┼──────────────┼─────────────
concat │ pg_catalog │ s相反,您应该能够使用字符串连接操作符||,但要确保将所有项转换为文本,否则使用||运算符的anyelement版本可能会遇到同样的问题。
因此,我认为这个查询应该有效:
UPDATE date_container SET json_value = json_value::jsonb - 'created_time' ||
(
'{"created_time":"'::text
|| rtrim(replace(to_timestamp(((json_value->>'created_time')::numeric/1000000))::text,' ','T'), '-05')::text
|| '"}'::text
)::jsonbhttps://stackoverflow.com/questions/71132925
复制相似问题