我正在使用NodeJS中的Sequelize ORM来管理PostgreSQL数据库。我在表中使用JSONB数据类型,我需要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创建表,但没有发现如何处理UNIQUE约束。以下是我的脚本示例:
var tableJson = sequelize.define('tableJson', {
content: Sequelize.JSONB
}, {
indexes: [{
fields: ['content'],
using: 'gin',
operator: 'jsonb_path_ops'
}
});
型
我的问题有解决方案吗?如果没有,我可能会使用sequelize.query方法来执行原始查询,但这不是很进化。
任何帮助将不胜感激!
2条答案
按热度按时间nnsrf1az1#
这是我使用Postgres和Sequelize在JSONB字段上添加索引的解决方法。
首先,在Sequelize客户机中将quoteIdentifiers选项设置为false。
字符串
(但是要注意,这会使Sequelize.sync()创建的所有表名不区分大小写)
现在,您可以在模型定义中以这种方式在JSONB字段上添加索引:
型
eh57zj3b2#
你必须做两件事。
1.将
quoteIdentifiers
设置为false。1.在索引中将
unique
设置为true。下面是完整的代码
字符串