如何为PostgreSQL编写一个倒序迁移,其中正向迁移添加了一个枚举值?

6
我想通过添加一个新的枚举值来扩展我的枚举类型。这很容易做到。我还将所有的SQL保存在迁移中,并将每个迁移与对称的向下迁移配对,将模式恢复到先前的状态。
然而,从枚举中删除变量的反向操作不受支持
有什么常见的方法吗?我可以看到两个选择:
  1. 编写带有if not exists子句的“up”迁移,在“down”迁移中不执行任何操作。我不喜欢这个选项,因为它违反了应用和还原迁移会使模式保持与之前相同的假设。
  2. 在“down”迁移中转换为新的枚举类型,如上面链接的问题所述——对于这样一个简单的操作似乎有点过度设计。

3
另一个很好的例子,说明为什么枚举通常不是一个好主意。如果使用带有外键的标准查找表,这将非常容易。删除该值只需运行一个 DELETE 语句即可。 - user330315
在这个问题的背景下,“迁移”是一个技术术语,还是你用来描述一个过程的词汇,这个过程对你有意义,但对我来说却没有意义? - 404
2
@eurotrash https://en.wikipedia.org/wiki/Schema_migration - Max Yankov
@a_horse_with_no_name 说得好。然而,目前我认为,对于那些与应用程序语言中的枚举变量一一对应的具有恒定数量变体的枚举类型,比外键更适合我的需求。 - Max Yankov
1个回答

4
您无法迁移一个 ENUM 。您的意见和评估是100%正确的。
如果这是个问题,那么这个选项就不在考虑之内。因为你是正确的。
ENUM 中删除值并不是一个简单的操作,所以为什么将具有更多值的 ENUM 迁移到只有少量值的枚举类型是一个简单的操作?
听听专家的建议,
“另一个好例子说明为什么枚举通常不是一个好主意。如果使用带有外键的标准查找表,则会非常容易。删除该值只需运行DELETE语句。”- a_horse_with_no_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接