首页 > 解决方案 > 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?

标签: node.jspostgresqlsequelize.js

解决方案


我遇到了类似的问题。就我而言(在迁移文件上),我改变了

defaultValue: Sequelize.UUIDV4, 

defaultValue: Sequelize.literal('uuid_generate_v4()'),

PS:我正在研究 Postgres,因此需要在架构上启用 uuid 模块


推荐阅读