簡體   English   中英

使用 Postgresql 時,如何在 SequelizeJS Model 中添加不區分大小寫的唯一約束?

[英]How to add a case-insensitive unique constraint in a SequelizeJS Model when using Postgresql?

var Model = sequelize.define('Company', {
  name: {
    type: DataTypes.STRING,
    unique: true
  }
}

在上面的示例中, unique: true 區分大小寫。 它允許將“sample”和“Sample”都保存在數據庫中。 sequelize 中是否有內置方法可以做到這一點,而無需編寫自定義驗證器?

我建議添加一個功能獨特的索引,如下所示: http//www.postgresql.org/message-id/c57a8ecec259afdc4f4caafc5d0e92eb@mitre.org

var Model = sequelize.define('Company', {
  name: {
    type: DataTypes.STRING
  }
}, 
{
  indexes: [
    { 
      unique: true,   
      name: 'unique_name',  
      fields: [sequelize.fn('lower', sequelize.col('name'))]   
    }
  ]
});

2022 年 8 月 1 日更新。 我在嘗試解決同樣的問題時偶然發現了這個問題,我帶來了好消息! 只要您使用 Postgres 或 SQLite,您就可以將數據類型設置為type: DataTypes.CITEXT並且您的值將在數據庫中保留它們的大小寫,同時如果您嘗試添加另一個條目而不考慮大小寫,也會出現驗證錯誤。

TLDR:如果列類型為CITEXTtestuserTestUser將引發驗證錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM