javascript - 如何创建不可为空的日期列?

标签 javascript knex.js

我正在使用sqlite。我需要创建一个日期不可为空。我尝试了一下,但不起作用。

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

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

Unhandled rejection Error: SQLITE_ERROR: Cannot add a column with non-constant default. Knex:warning - migrations failed with error: alter table minisermao add column diaminisermao date not null default CURRENT_TIMESTAMP - SQLITE_ERROR: Cannot add a column with non-constant default

如何解决?

最佳答案

确实,对于创建表,我们有一个不错的结果:

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");
};

但是对于更改表操作,它会给我们一个错误。

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

进行迁移以删除当前表:

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());
  }); 
};

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

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

希望有帮助。

更新:

同样的更改表在 postgresql 上完美运行。

关于javascript - 如何创建不可为空的日期列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733085/

相关文章:

javascript - 如何在浏览器中使用 knex.js

javascript - jQuery 中 scrollTop/transform CSS 效果的正确语法?

JavaScript 在部分 View MVC 中失败

mysql - 无法在 knex node express 中将 multipleStatements 设置为 true

node.js 和 postgres 批量更新插入或其他模式?

node.js - 如何使用 Node.js 应用程序在 Travis CI 中创建真实的实时数据库?

javascript - 我应该通过 PHP 还是 JavaScript 进行哈希处理?

javascript - 替换表格每一行的所有div标签

javascript - 动态地为 child 添加类(class)

javascript - Knexjs 将 mysql 时间戳、日期时间列作为 Javascript 日期对象返回