chore(sql):补充数据库变更文件
This commit is contained in:
1 parent
534cdc18d9
commit
bdc228c546
1 file changed
+25
@@ -0,0 +1,25 @@
|
||||
-- +goose Up
|
||||
-- 将 tnt_users.email 由 NOT NULL 改为可空。
|
||||
--
|
||||
-- 背景:普通成员的邮箱在系统中基本用不上——成员只能用 RAM 账号(username@tenant_code)
|
||||
-- 登录(admin 邮箱登录只认 role=owner 的主用户),且成员不能凭邮箱自助重置密码,
|
||||
-- 邮箱仅用于邮件通知与成员列表展示。因此将邀请加入、管理员创建、CSV 导入三条
|
||||
-- 创建路径统一为「邮箱选填」,与 CreateMember / member_import 既有的选填行为对齐。
|
||||
--
|
||||
-- 顺带修复既有隐患:原 email 为 NOT NULL + UNIQUE(tenant_id, email),不填邮箱时
|
||||
-- 代码只能写入空字符串 "",而空字符串是确定值,导致同一租户下仅能存在一个空邮箱
|
||||
-- 成员,第二个会撞唯一约束报「邮箱已存在」。改为可空后,PostgreSQL 唯一索引允许
|
||||
-- 多个 NULL,多个无邮箱成员不再冲突。
|
||||
--
|
||||
-- 注意:列的可空性变更不需要重新 gf gen dao——DO 中 Email 字段本就声明为 any 类型,
|
||||
-- 业务代码在 email 为空时传 nil 即可写入 SQL NULL。
|
||||
|
||||
ALTER TABLE tnt_users ALTER COLUMN email DROP NOT NULL;
|
||||
|
||||
-- 将已存在的空字符串 email 归一为 NULL,避免旧空串数据继续占用唯一约束位。
|
||||
UPDATE tnt_users SET email = NULL WHERE email = '';
|
||||
|
||||
-- +goose Down
|
||||
-- 恢复 NOT NULL 前需保证无 NULL email(否则 SET NOT NULL 会失败),回退为空字符串。
|
||||
UPDATE tnt_users SET email = '' WHERE email IS NULL;
|
||||
ALTER TABLE tnt_users ALTER COLUMN email SET NOT NULL;
|
||||
Reference in new issue
Block a user