更新 knex 迁移中的枚举列类型

2023-11-23

我正在寻找编写一个迁移字符串以将新字符串添加到枚举列类型。我正在尝试添加gamma to the service column.

我尝试使用下面的代码。这会发生冲突,因为表和列已经存在。

const table = 'user_associations'

export function up (knex, Promise) {
  return knex.schema.table(table, function (table) {
    table.enu('service', ['alpha', 'beta', 'gamma']).notNullable()
  })
}

export function down (knex, Promise) {
  return knex.schema.table(table, function (table) {
    table.enu('service', ['alpha', 'beta']).notNullable()
  })
}

const tableName = 'user_associations'

export function up (knex, Promise) {
  let existRows;
  return knex.select()
  .from(tableName)
  .then((rows) => {
    existRows = rows
    return knex.schema.table(tableName, (table) => table.dropColumn('service'))
  })
  .then(() => knex.schema.table(tableName, (table) => table.enu('service', ['alpha', 'beta', 'gamma']).notNullable().default('alpha')))
  .then(() => {
    return Promise.all(existRows.map((row) => {
      return knex(tableName)
      .update({ service: row.service })
      .where('id', row.id)
    }))
  })
}

export default down(kenx, Promise) {
  let existRows;
  return kenx.select()
  .from(tableName)
  .then((rows) => {
    existRows = rows
    return knex.schema.table(tableName, (table) => table.dropColumn('service'))
  })
  .then(() => knex.schema.table(tableName, (table) => table.enu('service', ['alpha', 'beta']).notNullable().default('alpha')))
  .then(() => {
    return Promise.all(existRows.map((row) => {
      return knex(tableName)
      .update({ service: row.service === 'gamma' ? 'alpha' : row.service })
      .where('id', row.id)
    }))
  })
}
  • notNull 列需要默认值吗?
  • 最好不要使用枚举,因为它不是反应性的...我将在代码中使用微小的整数字段和常量来控制可选字段
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新 knex 迁移中的枚举列类型 的相关文章

  • 如何恢复文本框数据

    我有一个小小的要求 我们已经恢复了之前清除的文本框数据 下面是我的 HTML 代码 table tr td td tr table
  • JAVASCRIPT - 为什么这个对象没有改变?

    function myFunc theObject theObject make Ford model Focus year 2006 var mycar make Honda model Accord year 1998 var x my
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • Javascript 作为对象键的函数与块中标记函数之间的语法冲突

    假设您有一个支持两者的浏览器带标签的函数声明 https developer mozilla org en US docs Web JavaScript Reference Statements label Labeled function
  • onClick 处理程序在每个渲染周期触发

    我有这样的默认状态 this state selectedTab tab1 then 我的渲染方法是这样的 render const selectedTab this state return li tab1 li li tab2 li d
  • 我可以在 GWT 中使用第三方 Javascript 库吗

    例如穆工具 用 js 编码对我来说很舒服 但显然不适合所有人 你当然可以 最好的事情就是给自己写一些好看的JavaScript 覆盖类型 http code google com webtoolkit doc latest DevGuide
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • 如何知道 .keyup() 是否是字符键(jQuery)

    如何知道 keyup 是否是字符键 jQuery input keyup function if key is a character such as a b A b c 5 3 2 etc not enter key or shift o
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • JPA 实体中的枚举字段

    我觉得问这个问题有点愚蠢 但我找不到这个问题的任何简单答案 以这个简单的实体为例 Entity Table name clienti public class Cliente implements Serializable private
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • jQuery Mobile + Admob:轮换?

    我使用 jQuery Mobile 框架创建了一个移动应用程序 所有页面都在index php中加载 使用 div 在每个页面的页脚中 我添加了Admob代码 div div div

随机推荐

  • psql中,为什么有些命令没有效果?

    有时我的命令在psql似乎没有效果 知道为什么吗 以下是数据库中所有表的列表library development library development gt d List of relations Schema Name Type Ow
  • 从 jar 文件复制目录

    我最近开发了一个应用程序并创建了 jar 文件 我的一个类创建一个输出目录 用其资源中的文件填充它 我的代码是这样的 Copy files from dir template in this class resource to output
  • 避免 Seaborn 条形图颜色去饱和

    我正在尝试使用几个不同的库 bokeh seaborn and matlotlib 但保持相同的配色方案 我从散景中选择了分类调色板 from bokeh palettes import Category10 as palette然后也用在
  • 什么是 Rails 插件或 Ruby gem,可以自动修复英语语法?

    Facebook 刚刚重新推出了 Comments 具有自动语法修复功能 语法过滤器有什么作用 添加标点符号 例如句子末尾的句号 修剪多余的空格 自动区分单词 例如 将 a 的第一个单词大写 句子 扩展俚语 例如 plz 变为 please
  • 如何实现带锁选择的select2?

    我正在尝试将 select2 与一个禁用值一起使用 我正在尝试像这样实现它 select currency select2 data preloaded data 我一直在读关于锁定选择但我无法实现它 请问有人可以让我知道如何实现它或者有关
  • 元标记中的 html 实体会影响索引吗?

    我想知道在元标记 如关键字和描述 中使用 HTML 实体是否是最好的方法 它会影响搜索引擎的索引吗 只要我的字符集允许字符 我就会放置没有实体的元标记内容 我研究了一下 发现了这个Google 网站管理员 网站所有者帮助该示例包含 9 24
  • 在 Hangfire 中保留执行超过 1 天的作业的历史记录

    我刚刚开始使用 Hangfire 我很喜欢它 据我了解 Hangfire 会将成功作业的历史记录保留 1 天 然后将其清除 有没有办法可以自定义此默认行为并将历史记录保留任意持续时间 例如 7 天 为此 您需要创建一个作业过滤器并通过han
  • postgres 无法识别函数中的临时表

    这可能是因为我累了 或者我是 postgres 新手 然而 我试图在函数中使用临时表 而 postgres 抱怨 关系不存在 然而 如果我获取函数的主体并执行它 它就可以正常工作 下面是我尝试创建的函数类型的示例 请记住 我已经删除了所有有
  • 我正在使用 Python urllib2 下载文件。如何查看文件大小有多大?

    如果它很大 那么停止下载 我不想下载大于 12MB 的文件 request urllib2 Request ep url request add header User Agent random choice agents thefile
  • R中按行号分割数据帧

    这可能非常简单 但我找不到解决方案 df lt data frame replicate 10 sample 0 1 10 rep TRUE v lt c 3 7 有没有一种优雅的方法可以在 v 中指定的行号处将此数据帧拆分为 列表的 三个
  • 将大小为编译时常量的数组初始化为单个值

    我有一个 c 风格的数组 其大小由 a 定义 define并且可以根据编译选项进行更改 例如 if LINUX define SIZE 4 else define SIZE 5 endif static int myArr SIZE 如何将
  • Reader和InputStream有什么区别?

    Reader和InputStream有什么区别 以及何时使用什么 如果我可以使用 Reader 来读取字符 为什么我会使用 inputstream 我想读取对象 InputStream 是从资源获取信息的原始方法 它逐字节抓取数据 而不执行
  • 指针初始化为什么?

    有件事总是让我困惑 那就是字符指针 四年后 我再次徘徊在 c 语言上 以上述案例为例 为什么char指针的行为是这样的 当指针指向任何内容时 我们如何直接寻址指针的内容 或者就像 char 指针存储地址以外的东西一样 include
  • 编写 Iron Python 调试器

    作为学习练习 我正在使用 IronPython 为自己编写一个简单的扩展 插件 宏框架 我已经掌握了基础知识 但我想添加一些基本的调试支持 以使我的脚本编辑器更易于使用 我在互联网上搜索了一下 发现了一些关于编写托管调试器的好资源 包括 M
  • 在 C 中用零覆盖整个文件的最快方法是什么?

    我需要做的是以最快的方式将整个文件内容用零填充 我知道一些Linux命令 比如cp实际上得到一次写入的最佳块大小信息是多少 但我无法弄清楚使用此块大小信息是否足以获得良好的性能并且看起来像st blksize来自stat 没有给我那个块大小
  • Haskell do 符号绑定

    我正在尝试对 Haskell 中的 do 语句进行脱糖处理 我在这里找到了一些例子 但无法将它们应用到我的案例中 我唯一能想到的是一个沉重的嵌套 let 语句 这看起来很丑陋 其中 do 表示法应替换为 bind 的语句 do num lt
  • 更改窗口的消息循环线程

    最近我尝试将窗口的消息循环放在它自己的线程中 我想知道为什么它从未收到任何消息 但我了解到Windows将消息发送到创建窗口的线程 如何在一个线程中创建一个窗口并使另一个线程接收该窗口的消息 我已经看到了 PostThreadMessage
  • 孩子在平面结构多模块maven构建中找不到父pom

    我正在设置一个具有扁平结构的多模块项目 即父级和子级位于同一基目录中 父级定义为
  • 为什么无法在升级中更改放置限制?

    我的 Azure Service Fabric 群集中运行着无状态 ASP NET Core RC1 服务 它具有以下清单
  • 更新 knex 迁移中的枚举列类型

    我正在寻找编写一个迁移字符串以将新字符串添加到枚举列类型 我正在尝试添加gamma to the service column 我尝试使用下面的代码 这会发生冲突 因为表和列已经存在 const table user association