Knex.js - 如何使用 'where' 子句创建唯一索引?
Knex.js - How to create unique index with 'where' clause?
我正在使用 Knex.js。我想用 WHERE 子句为我的 table 创建一个唯一索引:
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')
})
我尝试为 table 创建两个部分索引。但是,whereNotNull
不能与 unique
函数链接。如何使用 'where' 子句创建唯一索引?
暂不支持部分索引。虽然 https://github.com/tgriesser/knex/pull/2401.
有 PR 尚未准备好
目前必须使用 knex.schema.raw。
试试这个:
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`
);
我正在使用 Knex.js。我想用 WHERE 子句为我的 table 创建一个唯一索引:
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')
})
我尝试为 table 创建两个部分索引。但是,whereNotNull
不能与 unique
函数链接。如何使用 'where' 子句创建唯一索引?
暂不支持部分索引。虽然 https://github.com/tgriesser/knex/pull/2401.
有 PR 尚未准备好目前必须使用 knex.schema.raw。
试试这个:
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`
);