1

特定的 postgres 数据库表有 21 个字段,其中一个字段设置为主键“repair_id”。另一个名为“repair_accession”的唯一字段也是一个特殊的唯一文本,格式类似于“NH13-1”。

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

示例:对于 2013 = NH13-1 至 NH13-999999

并且在 2014 年 1 月 1 日,它将自行重置并从 NH14-1 开始直到 NH14-999999

等等

你的回答很受好评!!

4

1 回答 1

0

你没有说你使用的是什么版本,但我从标签中假设它是 9.2。IMO,你需要在这里结合一些东西:

  • 定序器
  • 插入前触发器
  • 一个 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)。如果您在插入时为每条记录加上时间戳,则可能不需要这样做。

希望这可以帮助。

于 2013-06-17T18:26:07.067 回答