【问题标题】:Resetting auto-increment column back to 0 daily每天将自动增量列重置为 0
【发布时间】:2011-01-02 18:31:51
【问题描述】:

postgresql 中有没有办法让自动递增的列在每天的指定时间重置为零?

【问题讨论】:

  • 您为什么要这样做?你能添加更多信息吗?与其陈述您认为的解决方案,不如告诉我们真正的问题是什么。
  • 鉴于 Postgres 在 8.4 中具有排名功能,更好的办法是根据时间戳进行排名

标签: database postgresql auto-increment


【解决方案1】:

使用 cronjob 可能很简单

0 0 * * * echo "SELECT setval('public.my_table_id_seq', 1, false)" | psql -U my_db_user -d my_db_name

或者,您可以将“串行”列设置为 DEFAULT 以调用存储过程,该存储过程将检查日期翻转,在适当的情况下重置序列,然后返回 nextval() 的结果。

但除此之外,不,我不希望有一个神奇的 ALTER SEQUENCE my_seq RESET AT INERVAL '1 day' 或类似的东西。

编辑:合并了duckyfuzz的评论。

【讨论】:

  • 当我尝试这个时,我得到一个“setval: value 0 is out of bounds for sequence "searches_id_seq"”错误。解决方案是像这样使用 seval() 的三参数版本:setval('public.my_table_id_seq', 1, false)。在这里阅读更多:postgresql.org/docs/current/static/functions-sequence.html
【解决方案2】:

基本上你可以用这个重置序列:

ALTER SEQUENCE your_sequence_name RESTART WITH 1;

享受...

【讨论】:

  • 我喜欢这种方式,更容易记住。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2019-05-11
  • 2011-08-01
  • 2013-05-17
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
相关资源
最近更新 更多