gpt4 book ai didi

node.js - 如何使用 Sequelize 在 JSONB 字段上创建 UNIQUE 约束

转载 作者:行者123 更新时间:2023-11-29 13:52:41 25 4
gpt4 key购买 nike

我在 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 方法来执行原始查询,但这不是很进化。

如有任何帮助,我们将不胜感激!

最佳答案

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

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

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

(但请注意,这将使您的所有表名在由 Sequelize.sync() 创建时不区分大小写)

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

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

关于node.js - 如何使用 Sequelize 在 JSONB 字段上创建 UNIQUE 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38019972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com