在 postgres 函数中使用 now 或 current_timestamp
Use now or current_timestamp inside a postgres function
尝试使用 || 更新 table 中的 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
--need statusUpdatedTimestamp to have the current time
new.jsonb_column = new.jsonb_column || '{"statusUpdatedTimestamp": ' now ' }';
end if;
return new;
end;
$function$ ;
我对 jsonb_column 的预期输出是
{
"status": "newStatus",
"statusUpdatedTimestamp": '2019-12-11 10:10:35'
}
使用函数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', to_char(now(), 'YYYY-MM-DD HH24-MI-SS'))
jsonb_build_object
---------------------------------------------------
{"statusUpdatedTimestamp": "2019-12-11 19:39:52"}
(1 row)
您的触发器函数的主体可能如下所示:
if TG_OP = 'UPDATE' and old.jsonb_column ->> 'status' <> new.jsonb_column ->> 'status' then
new.jsonb_column = new.jsonb_column || jsonb_build_object('statusUpdatedTimestamp', to_char(now(), 'YYYY-MM-DD HH24-MI-SS'));
end if;
return new;
尝试使用 || 更新 table 中的 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
--need statusUpdatedTimestamp to have the current time
new.jsonb_column = new.jsonb_column || '{"statusUpdatedTimestamp": ' now ' }';
end if;
return new;
end;
$function$ ;
我对 jsonb_column 的预期输出是
{
"status": "newStatus",
"statusUpdatedTimestamp": '2019-12-11 10:10:35'
}
使用函数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', to_char(now(), 'YYYY-MM-DD HH24-MI-SS'))
jsonb_build_object
---------------------------------------------------
{"statusUpdatedTimestamp": "2019-12-11 19:39:52"}
(1 row)
您的触发器函数的主体可能如下所示:
if TG_OP = 'UPDATE' and old.jsonb_column ->> 'status' <> new.jsonb_column ->> 'status' then
new.jsonb_column = new.jsonb_column || jsonb_build_object('statusUpdatedTimestamp', to_char(now(), 'YYYY-MM-DD HH24-MI-SS'));
end if;
return new;