如何使用Sequelize在JSONB字段上创buildUNIQUE约束

我在NodeJS中使用Sequelize ORM来pipe理postgreSQL数据库。 我在我的表中使用JSONB数据types,我需要JSONB字段上的索引和此JSON属性上的唯一约束。 如果我必须在这里做一个经典的SQL我的脚本:

CREATE TABLE tableJson (id SERIAL PRIMARY KEY, content JSONB NOT NULL); CREATE INDEX j_idx ON tableJson USING gin(content jsonb_path_ops); CREATE UNIQUE INDEX content_name_idx ON tableJson(((content->>'name')::varchar)); 

我发现如何使用INDEX创build表,但不知道如何处理UNIQUE约束。 以下是我的脚本示例:

 var tableJson = sequelize.define('tableJson', { content: Sequelize.JSONB }, { indexes: [{ fields: ['content'], using: 'gin', operator: 'jsonb_path_ops' } }); 

有没有解决我的问题? 如果没有,我可能会使用sequelize.query方法来执行原始查询,但这不是非常演变。

任何帮助,将不胜感激!

这是我用来添加JSONB字段与Postgres和Sequelize索引的解决方法。

首先,在Sequelize客户端中将quoteIdentifiers选项设置为false。

 const seq = new Sequelize(db, user, pass, { host: host, dialect: 'postgres', quoteIdentifiers: false, }); 

(请注意,这将使Sequelize.sync()创build时所有表名不区分大小写)

您现在可以在模型定义中以这种方式在JSONB字段中添加索引:

 indexes: [ { fields: ['content'], using: 'gin', operator: 'jsonb_path_ops' }, { fields: ['((content->>\'name\')::varchar)'], unique: true, name: 'content_name_idx', } ],