You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何将jsonb内的timestamp更新为now()函数值?

解决PostgreSQL jsonb字段中更新timestamp为now()的报错问题

你遇到的报错核心原因是**jsonb_set函数的第三个参数要求是jsonb类型**,而你用to_char(now(), 'some date format')返回的是普通文本(text类型),PostgreSQL不会自动把这个文本转换成合法的jsonb值,所以触发了类型不匹配的错误。你之前用带单引号的日期字符串能正常运行,是因为那个字符串是符合json格式的字面量,PostgreSQL会隐式将其转换为jsonb类型。

下面是两种可行的解决办法:

方法1:显式将时间文本转换为jsonb类型

使用to_jsonb()函数把to_char生成的时间字符串包装成jsonb类型,匹配jsonb_set的参数要求:

UPDATE test 
SET column = jsonb_set(column, '{time}', to_jsonb(to_char(now(), 'YYYY-MM-DD HH24:MI:SS')), true);

把YYYY-MM-DD HH24:MI:SS替换成你需要的日期格式即可。

方法2:直接转换timestamp为jsonb(推荐,无需手动指定格式)

如果你可以接受ISO标准格式的时间字符串,直接把now()返回的timestamp类型用to_jsonb()转换即可,PostgreSQL会自动将其转为标准的json字符串格式:

UPDATE test 
SET column = jsonb_set(column, '{time}', to_jsonb(now()), true);

这种方式更简洁,也避免了手动指定格式可能带来的错误。

另外,你也可以用::jsonb类型转换符替代to_jsonb(),效果完全一致:

UPDATE test 
SET column = jsonb_set(column, '{time}', to_char(now(), 'YYYY-MM-DD HH24:MI:SS')::jsonb, true);

内容的提问来源于stack exchange,提问作者Grigor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:18