首页 > 解决方案 > 在迁移中使用另一列作为默认值

问题描述

我正在尝试将新列添加到具有列的现有tableName表中anotherColumn

exports.up = function (knex, Promise) {
    return knex.schema.table('tableName', table => {
        table.string('newColumn').defaultTo(table.anotherColumn);
    });
};

我应该如何将现有列的值放入这个新列?

标签: sqlknex.js

解决方案


简短的回答是,您不能:该defaultTo值不能来自另一列。但是,如果您只是想在迁移时进行默认设置,您可以这样做:

exports.up = knex =>
  knex.schema.table('tableName', t => {
    t.string('newColumn')
  })
    .then(() => knex('tableName').update('newColumn', knex.ref('anotherColumn'));

希望很明显,这不会更新迁移后插入的新行:为此,您需要一个触发器,或者确保您在插入代码中覆盖了它。


推荐阅读