好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PostgreSQL更新表时时间戳不会自动更新的解决方法

PostgreSQL 更新表时 时间戳 不会自动更新的解决方法,具体如下

操作系统:CentOS7.3.1611_x64

PostgreSQL版本:9.6

问题描述

PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新。

在mysql中可以在创建表时定义自动更新字段,比如 :

?

1

2

3

4

5

6

7

create 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

18

create 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

9

insert 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

查看更多关于PostgreSQL更新表时时间戳不会自动更新的解决方法的详细内容...

  阅读:62次