在postgres函数中立即使用或使用current_timestamp

问题描述 投票:0回答:1

试图使用||更新表中的JSONB列运算符,然后使用now或current_timestamp插入当前时间,但不能。

我的jsonb_column结构是

{
  "status": "oldStatus",
  "statusUpdatedTimestamp": null //this field might be present or not, if it's present it has to be overwritten. if not, it has to be added
}
create or replace
function update_jsonb() returns trigger language plpgsql as $function$ begin if (TG_OP = 'UPDATE'
and old.jsonb_column ->> 'status' <> new.jsonb_column ->> 'status') then new.jsonb_column = new.jsonb_column || '{"statusUpdatedTimestamp": ' now ' }'; --need statusUpdatedTimestamp to have the current time

end if;

return new;

end;

$function$ ;

我对jsonb_column的预期输出是

{
  "status": "newStatus",
  "statusUpdatedTimestamp": '2019-12-11 10:10:35'
}
postgresql postgresql-9.6
1个回答
0
投票

使用功能jsonb_build_object(),例如:

select jsonb_build_object('statusUpdatedTimestamp', now()::text)

                     jsonb_build_object
-------------------------------------------------------------
 {"statusUpdatedTimestamp": "2019-12-11 19:39:22.950725+01"}
(1 row)

select jsonb_build_object('statusUpdatedTimestamp', left(now()::text, 19))

                jsonb_build_object
---------------------------------------------------
 {"statusUpdatedTimestamp": "2019-12-11 19:39:52"}
(1 row)
© www.soinside.com 2019 - 2024. All rights reserved.