首页 > 解决方案 > 实现一个以 SEQUENCE 和 CYCLE 递增、具有 MAXVALUE 并仅自动使用 UNIQUE 值的列的最佳方法是什么?

问题描述

所以我可以实现除了唯一性之外的一切:

CREATE SEQUENCE my_sequence 
MAXVALUE 5
CYCLE; 

ALTER TABLE my_table ADD COLUMN my_column int NOT NULL nextval('my_sequence');

我通过插入 5 条记录并删除第三条记录来测试这一点,结果是 'my_column' 设置为 1、2、4 和 5 的 4 条记录。我想要的是插入另一个 my_table 记录并让 'my_column' 为 3,因为那是下一个“可用”值。相反,它将其设置为 1。

如果我将列更改为:

ALTER TABLE my_table ADD COLUMN my_column int UNIQUE NOT NULL nextval('my_sequence');

然后它仍然尝试在“my_column”中插入值为 1 并引发唯一约束错误。

我理解为什么会这样工作,序列不可能知道表的状态。但是我如何实现这个功能呢?可以用串口完成吗?可以做到吗?

标签: postgresql

解决方案


推荐阅读