postgres的update_time设置

本文介绍了一个使用PL/pgSQL实现的触发器函数,用于自动更新数据库表中的创建时间和更新时间字段。通过创建两个函数cre_timestamp()和upd_timestamp(),并在插入或更新记录时触发这些函数,可以确保时间戳字段始终被设置为当前时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create or replace function upd_timestamp() returns trigger as
$$
begin
  new.update_time = current_timestamp;
  return new;
end
$$
language plpgsql;
create or replace function cre_timestamp() returns trigger as
$$
begin
  new.create_time= current_timestamp;
  return new;
end
$$
language plpgsql;
 
drop table if exists fire_user;
create table fire_user(id serial NOT NULL,  
  username character varying,  
  email character varying,
 password character varying,  
 name character varying, 
status int,
phone character varying,
 creator character varying, 
  create_time   timestamp default current_timestamp,
 update_time   timestamp default current_timestamp,
user_group character varying,
language character varying,
avatar character varying,
PRIMARY KEY (id ));
create trigger t_name before update on fire_user  for each row execute procedure upd_timestamp();
create trigger z_name before insert on fire_user  for each row execute procedure cre_timestamp();

不知道为什么直接从txt文本复制到db能执行,但是直接copy的网页这段却不能执行,大家要用的话,先copy到文本再copy到db执行

CREATE OR REPLACE FUNCTION "scope_fun"("in_scope_ids" _int8) RETURNS TABLE("chapter_id" numeric, "chapter_name" text, "p_id" numeric, "seq" numeric, "creator_id" numeric, "visible" numeric, "scope_id" numeric, "status_id" numeric, "update_time" timestamp, "create_time" timestamp, "is_valid" text, "mask_scope_id" numeric) AS $BODY$ BEGIN RETURN QUERY -- 字段一一映射 WITH RECURSIVE sp AS ( SELECT scope.scope_id AS root_id, scope.scope_id, scope.p_id, 1 AS deep FROM scope WHERE scope.scope_id = ANY (in_scope_ids) UNION SELECT sp.root_id, p.scope_id, p.p_id, (sp.deep + 1) AS deep FROM (scope p JOIN sp ON ((sp.p_id = p.scope_id))) ), cm AS ( SELECT sp.root_id, cap.chapter_id, cap.chapter_name, cap.p_id, cap.seq, cap.creator_id, cap.visible, cap.scope_id, cap.status_id, cap.update_time, cap.create_time, NULL :: CHARACTER VARYING AS is_valid, sp.deep FROM (sp JOIN chapter cap ON ((cap.scope_id = sp.scope_id))) UNION ALL SELECT sp.root_id, capm.chapter_id, capm.chapter_name, capm.p_id, capm.seq, capm.creator_id, capm.visible, capm.scope_id, capm.status_id, capm.update_time, capm.create_time, capm.is_valid, sp.deep FROM (sp JOIN chapter_mask capm ON ((capm.scope_id = sp.scope_id))) ), cmds AS ( SELECT cm.root_id, cm.chapter_id, cm.chapter_name, cm.p_id, cm.seq, cm.creator_id, cm.visible, cm.scope_id, cm.status_id, cm.update_time, cm.create_time, cm.is_valid, cm.deep FROM cm ORDER BY cm.deep DESC ) SELECT cmds.chapter_id :: NUMERIC, cover_v((cmds.chapter_name) :: TEXT) AS chapter_name, cover_n((cmds.p_id) :: NUMERIC) AS p_id, cover_n((cmds.seq) :: NUMERIC) AS seq, cover_n((cmds.creator_id) :: NUMERIC) AS creator_id, cover_n((cmds.visible) :: NUMERIC) AS visible, min(cmds.scope_id) :: NUMERIC AS scope_id, cover_n((cmds.status_id) :: NUMERIC) AS status_id, cover_t(cmds.update_time) AS update_time, cover_t(cmds.create_time) AS create_time, cover_v((cmds.is_valid) :: TEXT) AS is_valid, cmds.root_id :: NUMERIC AS mask_scope_id FROM cmds GROUP BY cmds.chapter_id, cmds.root_id; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000 这是我postgres的函数,修改这个函数让其能在神舟通用数据库中使用,我的神舟通用数据库是com.oscar.Driver,注意,cover_xx是我的函数
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值