Sequelize:将列类型更改为 ENUM

Posted

技术标签:

【中文标题】Sequelize:将列类型更改为 ENUM【英文标题】:Sequelize: Change column type to ENUM 【发布时间】:2016-10-06 16:58:45 【问题描述】:

在将数据保留在该列中时,我似乎找不到将列从 String 类型更改为 ENUM 的正确方法。

我还尝试使用 ENUM 类型创建一个新列,然后在列之间复制数据:

// migrations/20160606170538-change-column.js

'use strict';

module.exports = 
  up: function (queryInterface, Sequelize) 
    return queryInterface.addColumn('time', 'newcolumn', 
      allowNull: true,
      type: Sequelize.ENUM('1-day', '7-day', '1-month', '3-month', '6-month', '1-year')
    ).then(function () 
      return queryInterface.sequelize.query("UPDATE time SET newcolum = oldcolumn");
    );
  ,

  down: function (queryInterface, Sequelize) 
  
;

但我在迁移时返回以下错误:

错误:列“newcolumn”的类型是 enum_time_newcolumn 但表达式的类型是字符变化]

【问题讨论】:

【参考方案1】:

Postgres 不知道 oldcolumn 中的字符串数据可以适合枚举值 - 尝试强制转换它

return queryInterface.sequelize.query("UPDATE time SET newcolum = oldcolumn::enum_time_newcolumn");

【讨论】:

以上是关于Sequelize:将列类型更改为 ENUM的主要内容,如果未能解决你的问题,请参考以下文章

将列类型从整数更改为字符串

Pyspark 将列类型从日期更改为字符串

postgreSQL 将列数据类型更改为没有时区的时间戳

Postgres 和 Laravel 如何将列从字符串类型更改为整数?

在 ROR 迁移期间将列类型从 Date 更改为 DateTime

Oracle SQL 在包含数据时将列类型从数字更改为 varchar2