Sequelize Seeding ARRAY(ENUM)

use*_*990 7 javascript postgresql node.js sequelize.js sequelize-cli

我似乎无法弄清楚如何使用 Sequelize 播种 ARRAY(ENUM)。当我通过我的应用程序注册用户时,我可以很好地创建一个新用户,但是当我在种子文件中使用 queryInterface.bulkInsert 时,我得到:

ERROR: column "roles" is of type "enum_Users_roles"[] but expression is of type text[]

这是我的代码:

return queryInterface.bulkInsert('Users', [
          {
              email: faker.internet.email(),
              roles: ['user'],
              password: "hash",
              public_id: faker.random.uuid(),
              created_at: new Date(),
              updated_at: new Date()
          }
      ]);
Run Code Online (Sandbox Code Playgroud)

这是我的用户迁移文件:

return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      email: {
        type: Sequelize.STRING,
          allowNull: false
      },
      password: {
        type: Sequelize.STRING,
          allowNull: false
      },
      roles: {
        type: Sequelize.ARRAY(Sequelize.ENUM({
            values: ['user', 'setter', 'admin']
        })),
          allowNull: false
      },
      public_id: {
        type: Sequelize.UUID,
          defaultValue: Sequelize.UUIDV4,
          allowNull: false
      },
      created_at: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updated_at: {
        allowNull: false,
        type: Sequelize.DATE
      }
    })
Run Code Online (Sandbox Code Playgroud)

我只是假设我做错了,但我找不到任何有关如何正确执行此操作的文档。如果有人可以帮助和解释(教人钓鱼),我将不胜感激。

use*_*990 4

github上有人回答了这里

这是他们对我有用的答案(我非常感激)

您可以使用此代码

class Item extends Sequelize.Model { }

Item.init({
  name: { type: DataTypes.STRING },
  values: {
    type: DataTypes.ARRAY(DataTypes.ENUM({
      values: ['a', 'b']
    }))
  }
}, {
  sequelize,
  timestamps: true
})

sequelize.sync({ force: true }).then(async () => {
  await sequelize.queryInterface.bulkInsert('Items', [
    {
      name: 'xyz',
      values: sequelize.literal(`ARRAY['a']::"enum_Items_values"[]`),
      createdAt: new Date(),
      updatedAt: new Date()
    }
  ]);
});
Executing (default): INSERT INTO "Items" ("name","values","createdAt","updatedAt") VAL


  [1]: https://github.com/sequelize/sequelize/issues/11541#issuecomment-542791562
Run Code Online (Sandbox Code Playgroud)

显然您需要更改数组值和枚举值。例如,我的将是 ARRAY['user']::"enum_Users_values"[]