2026-03-01 01:08:43 +08:00
|
|
|
|
-- 先恢复
|
|
|
|
|
|
ALTER TABLE base_sys_user
|
|
|
|
|
|
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 $$
|
2026-03-01 00:27:08 +08:00
|
|
|
|
DECLARE
|
2026-03-01 01:08:43 +08:00
|
|
|
|
seq bigint;
|
|
|
|
|
|
a int;
|
|
|
|
|
|
b int;
|
2026-03-01 00:27:08 +08:00
|
|
|
|
BEGIN
|
2026-03-01 01:08:43 +08:00
|
|
|
|
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);
|
2026-03-01 00:27:08 +08:00
|
|
|
|
END;
|
2026-03-01 01:08:43 +08:00
|
|
|
|
$$;
|
2026-03-01 00:27:08 +08:00
|
|
|
|
|
2026-03-01 01:08:43 +08:00
|
|
|
|
-- 启用
|
2026-03-01 00:27:08 +08:00
|
|
|
|
ALTER TABLE base_sys_user
|
2026-03-01 01:08:43 +08:00
|
|
|
|
ALTER COLUMN id SET DEFAULT next_8digit_shuffle_id();
|
2026-03-01 00:27:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ALTER TABLE base_sys_user
|
|
|
|
|
|
ALTER COLUMN id
|
|
|
|
|
|
SET DEFAULT nextval('base_sys_user_id_seq');
|