node.js - Sequelize – id as uuid – 使用 bulkInsert 自动创建
问题描述
我有一个带有这样初始化的模型:
Group.init({
id: {
type: DataTypes.UUID,
primaryKey: true,
allowNull: false,
defaultValue: DataTypes.UUIDV4,
},
name: Sequelize.STRING,
});
我还有一个关联的迁移文件:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Groups', {
id: {
type: Sequelize.UUID,
primaryKey: true,
allowNull: false,
defaultValue: Sequelize.UUIDV4,
},
name: Sequelize.STRING,
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Groups');
},
};
我bulkInsert
在创建组时尝试在播种机内部,我只传递一个name
属性,期望数据库创建 uuid:
const groups = [{ name: 'group-1' }, { name: 'group-2' }];
return queryInterface.bulkInsert('Groups', groups, {
returning: true,
validate: true,
individualHooks: true,
});
},
然而在这个种子期间有一个错误:
ERROR: null value in column "id" violates not-null constraint
如何自动生成 uuid?
解决方案
我遇到了类似的问题。就我而言(在迁移文件上),我改变了
defaultValue: Sequelize.UUIDV4,
至
defaultValue: Sequelize.literal('uuid_generate_v4()'),
PS:我正在研究 Postgres,因此需要在架构上启用 uuid 模块