【问题标题】:How to write a down migration for Postgresql where up migration adds an enum value?如何为向上迁移添加枚举值的 Postgresql 编写向下迁移?
【发布时间】:2018-10-18 06:18:53
【问题描述】:

我想通过添加一个新的枚举值来扩展我的枚举类型。这很简单。我还将所有 SQL 保留在迁移中,并将每个向上迁移与对称向下迁移配对,将架构恢复到以前的状态。

然而,反向操作——从枚举中删除一个变体——is not supported

这方面的常用方法是什么?我可以看到两个选项:

  1. 使用if not exists 子句编写“向上”迁移,在“向下”迁移中什么也不做。我不喜欢这个选项,因为它违反了这样一个假设,即应用和恢复迁移会使架构保持与以前相同的状态。
  2. 在“向下”迁移中转换为新的枚举类型,如上面链接的问题中所述 - 对于这样一个简单的操作来说似乎有点过头了。

【问题讨论】:

  • 另一个很好的例子,说明枚举通常不是一个好主意。如果您使用带有外键的标准查找表,这将非常容易。删除值就像运行 DELETE 语句一样简单
  • 在这个问题的上下文中,“迁移”是一个技术术语,还是您用来描述一个对您有意义但对我没有意义的过程的词?
  • @a_horse_with_no_name 好点。但是,目前我认为具有恒定数量的变体的枚举可以一对一映射到应用程序语言中的枚举变体,比外键更适合我的需求

标签: postgresql enums database-migration


【解决方案1】:

您无法迁移ENUM。您的意见和评估是 100% 正确的。

我不喜欢这个选项,因为它违反了这样一个假设,即应用和恢复迁移会使架构保持与以前相同的状态。

如果这是一个挂断,那么这个选项就不存在了。因为你是对的。

这样一个简单的操作似乎有点过头了。

这是因为从ENUM 中删除一个值并不是一个简单的操作。那么为什么将具有更多值的ENUM 迁移到具有更少值的ENUM 是一项简单的操作呢?

听马的,

另一个很好的例子说明为什么枚举通常不是一个好主意。如果您使用带有外键的标准查找表,这将非常容易。删除值就像运行 DELETE 语句一样简单 – a_horse_with_no_name

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 2017-10-02
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多