Postgresql Sequelize不会创建唯一约束

Postgresql Sequelize不会创建唯一约束,postgresql,sequelize.js,unique-constraint,sequelize-cli,Postgresql,Sequelize.js,Unique Constraint,Sequelize Cli,我正在尝试使用sequelize在我的postgres DB中的多个列上创建一个唯一的约束。说明很清楚,但不起作用。以下是我的迁移文件的外观: module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable('scores', { id: { allowNull: false, autoIncrement: true,

我正在尝试使用sequelize在我的postgres DB中的多个列上创建一个唯一的约束。说明很清楚,但不起作用。以下是我的迁移文件的外观:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('scores', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      opp: {
        type: Sequelize.INTEGER,
        allowNull: false,
        unique: 'compositeScoreIndex'
      },
      oppt: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: 'compositeScoreIndex'
      },
      tree: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: 'compositeScoreIndex'
      },
      version: {
        type: Sequelize.INTEGER,
        allowNull: false,
        unique: 'compositeScoreIndex'
      },
      score: {
        type: Sequelize.JSON,
        allowNull: false
      }
    }, {
      indexes: [{
          unique: true,
          fields: ['opp', 'oppt', 'tree', 'version']
      }]
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('scores');
  }
};
这应等同于此查询:

CREATE TABLE scores (id INT PRIMARY KEY NOT NULL, opp INT NOT NULL,
oppt TEXT NOT NULL, tree TEXT NOT NULL, version INT NOT NULL, score
JSON NOT NULL, CONSTRAINT uniq_scores UNIQUE(opp, oppt, tree, version));
但是sequelize迁移无法创建约束。我能够在opp、oppt、tree和version中创建具有相同值的多行。还有人看到这个吗

更新:我能够让迁移打印出SQL查询的日志语句。以下是使用上述迁移文件运行的CREATE TABLE查询:

CREATE TABLE IF NOT EXISTS "scores" ("id"   SERIAL , "oppId" INTEGER NOT NULL,
"oppType" VARCHAR(255) NOT NULL, "tree" VARCHAR(255) NOT NULL,
"version" INTEGER NOT NULL, "score" JSON NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL,
"updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id"));

显然,没有提到唯一的约束。有人知道为什么Sequelize在这里的表现不如预期吗

检查pg_indexes表在运行sequelize迁移时,我没有看到多列上的唯一约束,但在手动运行上面的sql查询时,我确实看到了。如果我可以记录迁移期间运行的sql查询,那就太好了。Ackerman,谢谢,但这对CLI不起作用。为了使它在CLI中工作,我必须在db.json中添加一个logging:true选项(如下所述:)。我遇到了同样的问题,表不是用postgres db中的主键创建的。我在字段定义中发现了一个输入错误。Sequelize没有显示错误,创建的表没有primaryKey。我正在使用“sequelize cli”:“^4.0.0”`