我有一个数据库,我想生成六个数字字符的唯一标记。每次在invoice_no
列中插入发票号时,都应生成此令牌。这意味着每次进行插入且列invoice_no
不是null
时,都会生成数字标记。我希望令牌能够生成尽可能多的令牌,而不会在任何情况下重复令牌。感谢
答案 0 :(得分:2)
您可以创建序列并使用它来生成令牌:
CREATE SEQUENCE seq_token
MINVALUE 0
MAXVALUE 999999
CYCLE
;
将当前令牌设置为下一个可用值:
num_token := nextval('seq_token');
您的实际令牌必须是6位数。如果你使用以零开头的标记(例如002354),那么实际的标记必须是一个文本,你可以像
那样生成text_token := lpad(num_token::text, 6, '0');
如果令牌必须是数字,则将MINVALUE
更改为100000。
(作业位于plpgsql
。您可以在触发器或存储过程中使用这些作业。)