feat: S0 主键改雪花(DDL 去 identity + 实体 ASSIGN_ID + 雪花配置)
为什么:自增主键把 ID 分配锁在单库序列上,分库分表时无法横向扩展。趁线上业务数据 近零(只有系统种子表有量)先改,代价最低。 - sql/schema.sql、sql/schema-phase1.sql、sql/partition-maintenance.sql:61 处 GENERATED BY DEFAULT AS IDENTITY 去掉,主键改 BIGINT 无默认值 - 52 个实体 @TableId IdType.AUTO -> IdType.ASSIGN_ID;两个入口 id-type: assign_id, 并加 global-config.sequence.worker-id/datacenter-id(单机固定值,多实例需按实例分配) - 新增 sql/migrate-s0-snowflake.sql:存量库幂等迁移,走 DROP IDENTITY 保留数据,不重建表 - 实测:三份建表脚本在新库连跑两遍幂等;线上 57 张表 identity 归零; watch_history/playback_ticket/order_event 的主键与唯一索引仍含分区键
This commit is contained in:
1 parent
6833e01e1f
commit
37c9a141d3
58 files changed
+174
-115
No files matched your search
+18
-18
@@ -1,7 +1,7 @@
|
||||
-- FruitShorts 短剧服务 · 建表脚本(PostgreSQL 18)
|
||||
--
|
||||
-- 与 MySQL 版本的对应关系:
|
||||
-- AUTO_INCREMENT -> GENERATED BY DEFAULT AS IDENTITY
|
||||
-- AUTO_INCREMENT -> 无(主键由应用侧雪花算法生成:MyBatis-Plus IdType.ASSIGN_ID)
|
||||
-- TINYINT -> SMALLINT
|
||||
-- DATETIME(3) -> TIMESTAMP(3)
|
||||
-- ON UPDATE CURRENT_TIMESTAMP -> set_updated_at() 触发器
|
||||
@@ -11,7 +11,7 @@
|
||||
-- ========== 系统域 ==========
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_admin_user (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
username VARCHAR(64) NOT NULL, -- 登录名
|
||||
password VARCHAR(100) NOT NULL, -- BCrypt 哈希
|
||||
real_name VARCHAR(64) NOT NULL DEFAULT '',
|
||||
@@ -31,7 +31,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_admin_user_username ON sys_admin_user (
|
||||
COMMENT ON TABLE sys_admin_user IS '管理员';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role_category (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
description VARCHAR(255) NOT NULL DEFAULT '',
|
||||
sort INT NOT NULL DEFAULT 0,
|
||||
@@ -43,7 +43,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_role_category_name ON sys_role_category
|
||||
COMMENT ON TABLE sys_role_category IS '角色分类';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
code VARCHAR(64) NOT NULL, -- 如 super_admin
|
||||
category_id BIGINT NOT NULL DEFAULT 0,
|
||||
@@ -59,7 +59,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_role_code ON sys_role (code);
|
||||
COMMENT ON TABLE sys_role IS '角色';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_admin_user_role (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL,
|
||||
role_id BIGINT NOT NULL
|
||||
);
|
||||
@@ -68,7 +68,7 @@ CREATE INDEX IF NOT EXISTS idx_sys_admin_user_role_role ON sys_admin_user_role (
|
||||
COMMENT ON TABLE sys_admin_user_role IS '管理员-角色';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_permission (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
code VARCHAR(128) NOT NULL, -- 如 drama:create
|
||||
name VARCHAR(64) NOT NULL,
|
||||
group_name VARCHAR(64) NOT NULL DEFAULT '',
|
||||
@@ -79,7 +79,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_permission_code ON sys_permission (code
|
||||
COMMENT ON TABLE sys_permission IS '权限点';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_menu (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
parent_id BIGINT NOT NULL DEFAULT 0,
|
||||
title VARCHAR(64) NOT NULL,
|
||||
route_path VARCHAR(128) NOT NULL DEFAULT '',
|
||||
@@ -101,7 +101,7 @@ CREATE INDEX IF NOT EXISTS idx_sys_menu_parent ON sys_menu (parent_id);
|
||||
COMMENT ON TABLE sys_menu IS '菜单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role_permission (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
role_id BIGINT NOT NULL,
|
||||
permission_id BIGINT NOT NULL
|
||||
);
|
||||
@@ -109,7 +109,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_role_permission ON sys_role_permission
|
||||
COMMENT ON TABLE sys_role_permission IS '角色-权限';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role_menu (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
role_id BIGINT NOT NULL,
|
||||
menu_id BIGINT NOT NULL
|
||||
);
|
||||
@@ -117,7 +117,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_role_menu ON sys_role_menu (role_id, me
|
||||
COMMENT ON TABLE sys_role_menu IS '角色-菜单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_config (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
config_key VARCHAR(128) NOT NULL,
|
||||
config_value VARCHAR(1024) NOT NULL DEFAULT '',
|
||||
remark VARCHAR(255) NOT NULL DEFAULT ''
|
||||
@@ -126,7 +126,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_sys_config_key ON sys_config (config_key);
|
||||
COMMENT ON TABLE sys_config IS '系统配置';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_operation_log (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
admin_user_id BIGINT NOT NULL DEFAULT 0,
|
||||
username VARCHAR(64) NOT NULL DEFAULT '',
|
||||
module VARCHAR(64) NOT NULL DEFAULT '',
|
||||
@@ -148,7 +148,7 @@ COMMENT ON TABLE sys_operation_log IS '操作日志';
|
||||
-- ========== 内容域 ==========
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_category (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
sort INT NOT NULL DEFAULT 0,
|
||||
status SMALLINT NOT NULL DEFAULT 1
|
||||
@@ -157,7 +157,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS uk_drama_category_name ON drama_category (name
|
||||
COMMENT ON TABLE drama_category IS '短剧类型';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
code VARCHAR(64) NOT NULL DEFAULT '',
|
||||
title VARCHAR(128) NOT NULL,
|
||||
subtitle VARCHAR(128) NOT NULL DEFAULT '',
|
||||
@@ -194,7 +194,7 @@ CREATE INDEX IF NOT EXISTS idx_drama_status_category ON drama (status, category_
|
||||
COMMENT ON TABLE drama IS '短剧';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_episode (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
drama_id BIGINT NOT NULL,
|
||||
ep_no INT NOT NULL,
|
||||
title VARCHAR(128) NOT NULL DEFAULT '',
|
||||
@@ -217,7 +217,7 @@ CREATE INDEX IF NOT EXISTS idx_drama_episode_status ON drama_episode (drama_id,
|
||||
COMMENT ON TABLE drama_episode IS '剧集';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS drama_review_record (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
biz_type VARCHAR(16) NOT NULL, -- DRAMA/EPISODE
|
||||
biz_id BIGINT NOT NULL,
|
||||
action VARCHAR(16) NOT NULL, -- SUBMIT/APPROVE/REJECT/PUBLISH/OFFLINE
|
||||
@@ -230,7 +230,7 @@ CREATE INDEX IF NOT EXISTS idx_drama_review_biz ON drama_review_record (biz_type
|
||||
COMMENT ON TABLE drama_review_record IS '审核记录';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS content_banner (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
image_url VARCHAR(512) NOT NULL DEFAULT '',
|
||||
slot VARCHAR(32) NOT NULL DEFAULT 'HOME_TOP', -- 展示位置:HOME_TOP/DISCOVER
|
||||
link_type VARCHAR(16) NOT NULL DEFAULT 'NONE', -- NONE/DRAMA/URL
|
||||
@@ -249,7 +249,7 @@ COMMENT ON TABLE content_banner IS '轮播图';
|
||||
-- 本地存储版本:文件落在 fruitshorts.media.root-dir 下,通过 /files/** 访问
|
||||
|
||||
CREATE TABLE IF NOT EXISTS media_asset (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
biz_type VARCHAR(32) NOT NULL DEFAULT 'EPISODE',
|
||||
file_name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
object_key VARCHAR(512) NOT NULL DEFAULT '',
|
||||
@@ -274,7 +274,7 @@ CREATE INDEX IF NOT EXISTS idx_media_asset_biz_type ON media_asset (biz_type);
|
||||
COMMENT ON TABLE media_asset IS '媒资';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS media_upload_task (
|
||||
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||
id BIGINT PRIMARY KEY,
|
||||
upload_id VARCHAR(64) NOT NULL,
|
||||
biz_type VARCHAR(32) NOT NULL DEFAULT 'EPISODE',
|
||||
file_name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
|
||||
Reference in new issue
Block a user