编辑文件 随机id生成
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
xinian
2026-03-01 01:08:43 +08:00
committed by cnb
parent 9cda69c23f
commit 835e816b04

View File

@@ -1,20 +1,37 @@
-- 生成 8 位随机不重复 ID 函数
CREATE OR REPLACE FUNCTION next_8digit_rand_id(seq_name regclass)
RETURNS integer AS $$
DECLARE
base_val bigint;
rand8id integer;
BEGIN
base_val := nextval(seq_name);
rand8id := (10000000 + ((base_val * 1234567 # floor(random() * 99999999))::bigint % 90000000))::integer;
RETURN rand8id;
END;
$$ LANGUAGE plpgsql VOLATILE;
-- base_sys_user 绑定 8 位随机ID
-- 先恢复
ALTER TABLE base_sys_user
ALTER COLUMN id
SET DEFAULT next_8digit_rand_id('base_sys_user_id_seq');
ALTER COLUMN id SET DEFAULT nextval('base_sys_user_id_seq');
DROP FUNCTION IF EXISTS next_8digit_shuffle_id() CASCADE;
-- 8位自增 洗牌 仍然8位 绝对不重复
CREATE OR REPLACE FUNCTION next_8digit_shuffle_id()
RETURNS bigint
LANGUAGE plpgsql
VOLATILE
AS $$
DECLARE
seq bigint;
a int;
b int;
BEGIN
seq := nextval('base_sys_user_id_seq');
-- 8 位数字拆开洗牌
a := (seq / 10000)::int; -- 前4位
b := (seq % 10000)::int; -- 后4位
-- 前后互换 + 简单扰乱保证
-- 1. 还是8位
-- 2. seq 不同 结果一定不同
return ((b * 9871) % 10000) * 10000
+ ((a * 1237) % 10000);
END;
$$;
-- 启用
ALTER TABLE base_sys_user
ALTER COLUMN id SET DEFAULT next_8digit_shuffle_id();