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

PostgreSQL之时间戳自动更新 PostgreSQL之时间戳自动更新(POSTGRESQL批量更新)  数据库 PostgreSQL 时间戳 第1张

问题描述

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

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

  1. createtableab(
  2. idint,
  3. changetimestamptimestamp
  4. NOTNULL
  5. defaultCURRENT_TIMESTAMP
  6. onupdateCURRENT_TIMESTAMP
  7. );

那PostgreSQL中怎么操作呢?

解决方案

通过触发器实现,具体如下:

  1. createorreplacefunctionupd_timestamp()returnstriggeras
  2. $$
  3. begin
  4. new.modified=current_timestamp;
  5. returnnew;
  6. end
  7. $$
  8. languageplpgsql;
  9. droptableifexiststs;
  10. createtablets(
  11. idbigserialprimarykey,
  12. tradeidinteger,
  13. emailvarchar(50),
  14. numinteger,
  15. modifiedtimestampdefaultcurrent_timestamp
  16. );
  17. createtriggert_namebeforeupdateontsforeachrowexecuteprocedureupd_timestamp();

测试代码:

  1. insertintots(tradeid,email,num)values(1223,'mike_zhang@live.com',1);
  2. updatetssetemail='Mike_Zhang@live'wheretradeid=1223;
  3. createuniqueindexts_tradeid_idxonts(tradeid);
  4. insertintots(tradeid,email,num)values(1223,'Mike_Zhang@live.com',2)onconflict(tradeid)doupdate
  5. setemail=excluded.email,num=excluded.num;
  6. select*fromts;
  7. --deletefromts;

好,就这些了,希望对你有帮助。

转载请说明出处
知优网 » PostgreSQL之时间戳自动更新(POSTGRESQL批量更新)

发表评论

您需要后才能发表评论