各位用户为了找寻关于PostgreSQL更新表时时间戳不会自动更新的解决方法的资料费劲了很多周折。这里教程网为您整理了关于PostgreSQL更新表时时间戳不会自动更新的解决方法的相关资料,仅供查阅,以下为您介绍关于PostgreSQL更新表时时间戳不会自动更新的解决方法的详细内容
PostgreSQL更新表时时间戳不会自动更新的解决方法,具体如下
操作系统:CentOS7.3.1611_x64
PostgreSQL版本:9.6
问题描述
PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新。
在mysql中可以在创建表时定义自动更新字段,比如 :
? 1 2 3 4 5 6 7create
table
ab (
id
int
,
changetimestamp
timestamp
NOT
NULL
default
CURRENT_TIMESTAMP
on
update
CURRENT_TIMESTAMP
);
那PostgreSQL中怎么操作呢?
解决方案
通过触发器实现,具体如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18create
or
replace
function
upd_timestamp()
returns
trigger
as
$$
begin
new.modified =
current_timestamp
;
return
new;
end
$$
language plpgsql;
drop
table
if exists ts;
create
table
ts (
id bigserial
primary
key
,
tradeid
integer
,
email
varchar
(50),
num
integer
,
modified
timestamp
default
current_timestamp
);
create
trigger
t_name before
update
on
ts
for
each row
execute
procedure
upd_timestamp();
测试代码:
? 1 2 3 4 5 6 7 8 9insert
into
ts (tradeid,email,num)
values
(1223,
'mike_zhang@live.com'
,1);
update
ts
set
email=
'Mike_Zhang@live'
where
tradeid = 1223 ;
create
unique
index
ts_tradeid_idx
on
ts(tradeid);
insert
into
ts(tradeid,email,num)
values
(1223,
'Mike_Zhang@live.com'
,2)
on
conflict(tradeid) do
update
set
email = excluded.email,num=excluded.num;
select
*
from
ts;
-- delete from ts;
好,就这些了,希望对你有帮助。
本文github地址。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
原文链接:http://www.cnblogs.com/MikeZhang/p/PostgreSQLRealte20171013.html