用于生成唯一递增值的触发器,该值每年从1开始,以两位数年份作为postgres中的prefex

时间:2013-06-17 03:39:06

标签: postgresql-9.2

特定的postgres数据库表有21个字段,其中一个字段被设置为序列作为主键“repair_id”。另一个名为“repair_accession”的独特字段也是一种特殊的独特文本,格式如“NH13-1”。

我正在寻找一个可靠的触发功能,用于根据两个字母,两位数年份格式以及1月1日每年重置为1的自动增量编号生成唯一编号。

示例:2013年= NH13-1升至NH13-999999

并于2014年1月1日,它将自行重置并以NH14-1开始至NH14-999999

你的答案非常适合!!

1 个答案:

答案 0 :(得分:0)

你没有说你正在使用什么版本,但我从Tag中假设它是9.2。 IMO,你需要在这里结合起来:

  • 一个音序器
  • a insert insert trigger
  • 在新年伊始重置音序器的cron作业(或类似事件)

搜索和审核文档:

  • Create Sequencer
  • nextval(获取生成ID的下一个值)
  • setval(通过cron作业重置)
  • date_part(获得年度)

基本上,在触发器中,您将通过date_part获取年份并将其存储在var(例如the_year)中,然后:

NEW.repair_accession := 'NH'||the_year::text||'-'||nextval({{name of sequencer}})::text;

注意:尚未测试解决方案或代码。如果您最终将此作为答案,我请求您使用实际代码更新此答案并删除此说明。

最后一个建议,如果你不得不按这个值排序,那么我建议你用零填充音序器中的值。例如:

NH13-0000100(代替HN13-100)。如果您在插入时为每条记录添加时间戳,则可能不需要这样做。

希望这有帮助。