Knex.js - 如何用'其中'创建唯一索引。条款?

时间:2018-03-08 11:25:17

标签: postgresql knex.js

我正在使用Knex.js.我想使用WHERE子句为我的表创建一个唯一索引:

db.schema.createTable('newTable', function(t) {
  t.increments()
  t.string('col1').defaultTo(null)
  t.string('col2').notNullable()
  t.integer('col3').notNullable()
  t.unique(['col1', 'col2', 'col3']).whereNotNull('col1')
  t.unique(['col2', 'col3']).whereNull('col1')
})

我尝试为表创建两个部分索引。但是,whereNotNull不能与unique函数链接。如何创建一个独特的索引,其中'条款?

2 个答案:

答案 0 :(得分:1)

尚不支持部分索引。虽然https://github.com/tgriesser/knex/pull/2401已经准备好PR了。

现在必须使用knex.schema.raw。

答案 1 :(得分:0)

尝试一下:

   knex.schema.raw(
      `CREATE UNIQUE INDEX "unique_partial_newTable_col1_col2_col3" ON "newTable" ("col1", "col2", "col3") WHERE "col1" IS NOT NULL`
    );

   knex.schema.raw(
      `CREATE UNIQUE INDEX "unique_partial_newTable_col2_col3" ON "newTable" ("col2", "col3") WHERE "col1" IS NULL`
    );