如何创建一个不可为空的日期列?

时间:2017-01-19 03:13:41

标签: javascript knex.js

我正在使用sqlite。我需要创建一个datenot nullable。我试了一下,但没有工作。

return knex.schema.table("my_table", (table) => {
  table.date("important_day").notNullable().defaultTo(knex.fn.now());
});

使用此代码,我收到此错误消息:

  

未处理的拒绝错误:SQLITE_ERROR:无法添加具有非常量默认值的列。   Knex:警告 - 迁移失败并显示错误:alter table minisermao add column diaminisermao date not null default CURRENT_TIMESTAMP - SQLITE_ERROR:无法添加具有非常量默认值的列

如何解决?

1 个答案:

答案 0 :(得分:0)

确实对于create table我们有一个好结果:

exports.up = function(knex, Promise) {
  return knex.schema.createTable("foo", function(tb){
    tb.date("xpto").notNullable().defaultTo(knex.fn.now());
  })
};

exports.down = function(knex, Promise) {  
  return knex.schema.dropTable("foo");
};

但是对于alter table操作,它给我们一个错误。

如果可能,请尝试以下操作:

进行迁移以删除当前表:

exports.up = function(knex, Promise) {
  return knex.schema.dropTable("foo");
};

exports.down = function(knex, Promise) { 
  return knex.schema.createTable("foo", function(tb){
    tb.date("xpto").notNullable().defaultTo(knex.fn.now());
  }); 
};

然后进行第二次迁移以再次创建表。

我建议采用这种方法,因为如果项目安装在生产环境中,那么改变已执行的迁移将不是一种健康的方法。

希望它有所帮助。

更新:

完全相同的alter table在postgresql上完美运行。