使用 sequelize 为 JSON 列添加 MariaDB 约束检查
Add MariaDB Constraint CHECK for JSON column using sequelize
我使用的是 MariaDB v10.2.11,从 v10.2.7 开始,您可以有 JSON 列,其约束验证行的 JSON 值。
我想通过 Sequelize 迁移添加那个约束,但我不知道该怎么做。
MariaDB JSON 文档:
我正在分享我在这个问题上的解决方案 (https://github.com/sequelize/sequelize/issues/8767)(这是我的)。
module.exports = {
up: (queryInterface, Sequelize) =>
queryInterface
.createTable('tableName', {
// id, other columns
column1: Sequelize.JSON,
// more columns
})
.then(() =>
queryInterface.addConstraint('tableName', ['column1'], {
type: 'check',
where: {
column1: Sequelize.literal('JSON_VALID(column1)'),
},
name: 'check_column1_has_valid_json',
}),
),
down: (queryInterface) => queryInterface.dropTable('tableName'),
};
由于 createTable
和 addConstraint
returns 一个承诺,可以在一次迁移中链接多个操作:)
我使用的是 MariaDB v10.2.11,从 v10.2.7 开始,您可以有 JSON 列,其约束验证行的 JSON 值。
我想通过 Sequelize 迁移添加那个约束,但我不知道该怎么做。
MariaDB JSON 文档:
我正在分享我在这个问题上的解决方案 (https://github.com/sequelize/sequelize/issues/8767)(这是我的)。
module.exports = {
up: (queryInterface, Sequelize) =>
queryInterface
.createTable('tableName', {
// id, other columns
column1: Sequelize.JSON,
// more columns
})
.then(() =>
queryInterface.addConstraint('tableName', ['column1'], {
type: 'check',
where: {
column1: Sequelize.literal('JSON_VALID(column1)'),
},
name: 'check_column1_has_valid_json',
}),
),
down: (queryInterface) => queryInterface.dropTable('tableName'),
};
由于 createTable
和 addConstraint
returns 一个承诺,可以在一次迁移中链接多个操作:)