Создайте таблицу и добавьте индексы в одну миграцию с помощью Sequelize

Каков правильный способ создания таблицы и добавления индексов на некоторые из ее столбцов в один перенос?

Пример миграции: 2012341234-create-todo.js

Как создать индекс в столбце "author_id" и "title"?

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Todos', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      author_id: {
        type: Sequelize.INTEGER,
        onDelete: 'CASCADE',
        references: {
          model: 'Authors',
          key: 'id',
          as: 'authorId'
        }
      },
      title: {
        type: Sequelize.STRING
      },

      content: {
        type: Sequelize.TEXT
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Todos');
  }
};

В документах Sequelize указывается, что индекс будет добавлен следующим образом:

queryInterface.addIndex('Todos', ['author_id', 'title']);

Могут ли эти методы быть скованными? "Вверх" и "вниз" просто нужно вернуть обещание? Я ничего не вижу в документах об этом.

Ответ 1

Да, методы могут быть прикованы. В вашем случае вы просто выполняете addIndex после метода createTable

return queryInterface.createTable('Todos', {
    // columns...
}).then(() => queryInterface.addIndex('Todos', ['author_id', 'title']))
.then(() => {
    // perform further operations if needed
});

Ответ 2

Я создал совершенно новый файл миграции, используя сырой синтаксис

module.exports = {
 up: (queryInterface) => {
 return queryInterface.sequelize.query('CREATE INDEX devices_mac_uuid ON 
  "Devices" ("mac","uuid")')
 },
 down: (queryInterface) => {
  return queryInterface.sequelize.query('DROP INDEX devices_mac_uuid')
 }
}