多租户 PostgreSQL 中,全局唯一约束会跨租户泄露数据:租户 2 插入已属租户 1 的邮箱会报重复键错误,即使启用了行级安全。修复方法是将 tenant_id 加入约束。软删除仍占用唯一值,需使用部分唯一索引(WHERE deleted_at IS NULL)并配合 lower() 忽略大小写。ON CONFLICT 必须匹配索引条件。NULL 默认互不相等,可用 NULLS NOT DISTINCT 改变。
完成下面两步后,将自动完成登录并继续当前操作。