使用多边形列 Sequelize 批量插入错误

Sequelize bulk insert error with polygon column

我有以下带有多边形类型列的模型

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('p_zones', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      points: {
        type: Sequelize.GEOMETRY('POLYGON')
      },
    });
  },
  down: async (queryInterface) => {
    await queryInterface.dropTable('ZonePoints');
  }
};

当我尝试通过命令 npx sequelize-cli db:seed:all

使用 sequelize-cli 播种时
const polygon = {
      type: 'Polygon',
      coordinates: [
        [
          [10, 10],
          [20, 10],
          [20, 20],
          [10, 20],
          [10, 10],
        ],
      ],
    };
 const data = [{ points: polygon }];
 await queryInterface.bulkInsert('p_zones', data);

我收到以下错误:

ERROR: Invalid value {
  type: 'Polygon',
  coordinates: [ [ [ 10, 10 ], [ 20, 10 ], [ 20, 20 ], [ 10, 20 ], [ 10, 10 ] ] ]
}

我做错了什么?

这似乎是 github 上 Sequelize 版本 6 的 open issue。您可以尝试 AmericasGitHub 上的建议,即

await queryInterface.bulkInsert(
    'p_zones',
    data,
    {},
    { points: { type: Sequelize.GEOMETRY('POLYGON') } });

尽管我必须承认,当我对 postgres 数据库执行上述操作时,出现以下错误:

Executing (default): INSERT INTO "p_zones" ("points") VALUES (GeomFromText('POLYGON((10 10,20 10,20 20,10 20,10 10))'));
(node:18964) UnhandledPromiseRejectionWarning: SequelizeDatabaseError: function geomfromtext(unknown) does not exist
    at Query.formatError ...

但希望这只是一个错误,因为我拥有 PostGIS 的特定版本。

顺便说一句,如果您的插入是 .bulkCreate 语句而不是 .bulkInsert 语句,则它可以正常工作。不幸的是,我不知道如何在不先定义整个模型的情况下执行 .bulkInsert。您可以尝试的事情:

  1. 构造一个 并以这种方式进行批量插入。
  2. 尝试通过从 queryInterface.sequelize 访问 sequelize 对象来定义模型,然后执行 .bulkCreate,这应该不会给您任何错误。