You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL表中对active=true的记录实施user_id与name的唯一性约束?

实现条件唯一约束的方案

完全可以实现你要的效果,用PostgreSQL的部分唯一索引就能满足需求,具体操作步骤如下:

1. 删除原有全局唯一约束

首先需要移除当前表中针对user_id和name的全局唯一约束,因为它限制了所有状态下的同名记录:

-- 先通过 \d workout_routine 查看约束的具体名称,替换下面的约束名
ALTER TABLE workout_routine DROP CONSTRAINT workout_routine_user_id_name_key;

2. 创建部分唯一索引

创建一个仅在active = true时生效的唯一索引,这样就能保证同一用户的活跃训练计划不会重名,而非活跃的则不受限制:

CREATE UNIQUE INDEX idx_unique_active_workout ON workout_routine (user_id, name) WHERE active = true;

效果说明

  • 当插入或更新记录时,如果active为true,数据库会检查该用户是否已有同名的活跃训练计划,存在则报错
  • 当active为false时,同一用户可以创建任意多条同名的非活跃训练计划,不会触发唯一约束

内容的提问来源于stack exchange,提问作者bugsyb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:15:49