postgresql TS校验(乐观锁)

postgresql的pl语言比较特殊,以下脚本在pgadmin执行成功,而在一些其他的数据库工具往往会报错

存储过程

create or replace function meheco_org_stmp()

returns trigger as $$

begin

 NEW.ts := date_trunc('second', now());

RETURN NEW;

end;

$$

language plpgsql;

date_trunc('second', now());这句将now()获得的时间戳削减精度到了秒。可根据需求酌情选择精度。

#触发器


CREATE TRIGGER meheco_org_stmp BEFORE INSERT OR UPDATE ON meheco_org

    FOR EACH ROW EXECUTE PROCEDURE meheco_org_stmp();

#更新语句


update meheco_org set name = 'testzhu' where id=6666 and ts= '2016-11-25 16:39:04' 

通过触发器在每次新增或更新表的一行时执行存储过程,该过程刷新了条目的ts字段,在更新时检查这一字段如果ts值不等于先前拿到的值,则说明在修改该条目时 有其他人也进行了修改操作并提交,根据乐观锁原则,该操作为非法操作,停止操作抛出异常。

#另附

##查看postgresql的function

SELECT
  pg_proc.proname AS "函数名称",
  pg_type.typname AS "返回值数据类型",
  pg_proc.pronargs AS "参数个数"
FROM
  pg_proc
    JOIN pg_type
   ON (pg_proc.prorettype = pg_type.oid)
WHERE
  pg_type.typname != 'void'
  AND pronamespace = (SELECT pg_namespace.oid FROM pg_namespace WHERE nspname = 'public');

##删除function

 drop function function_name (parameters_list);

转载于:https://my.oschina.net/superise/blog/795296

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值