【问题标题】:Knex.js - How to create unique index with 'where' clause?Knex.js - 如何使用“where”子句创建唯一索引?
【发布时间】:2018-08-16 17:42:43
【问题描述】:

我正在使用 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 函数链接。如何使用 'where' 子句创建唯一索引?

【问题讨论】:

    标签: postgresql knex.js


    【解决方案1】:

    试试这个:

       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`
        );
    

    【讨论】:

    • 不知道为什么有人不同意这个答案。这应该工作
    【解决方案2】:

    尚不支持部分索引。虽然https://github.com/tgriesser/knex/pull/2401 有一个 PR 还没有准备好。

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

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2023-03-20
      相关资源
      最近更新 更多