首页 > 解决方案 > 更改 Postgres 中的基础枚举值

问题描述

我有 .NET Core 应用程序,它使用实体框架与 Postgres 数据库通信。

模型中使用了一个枚举,它在 postgres 中创建了一个 Postgres 枚举类型。

现在我需要这样的迁移,它将枚举更改为标志,所以我需要在 C# 中更改枚举整数值。

我觉得我还应该更改 Postgres 中的底层枚举值,但我在那里看不到任何数字,我只在类型定义中看到枚举名称。

Postgres 如何在内部存储枚举?

如果枚举的整数值在 C# 中更改,我该如何迁移它?

标签: c#postgresqlenumsentity-framework-core

解决方案


我不知道 Postgres 如何在内部存储枚举并且不喜欢依赖它。
假设您的枚举类型被调用_enumtype并且该列被调用,_enumcolumn那么您可以更改表结构(枚举->整数)并将数据保留在其中,如下所示:

alter table _mytable 
  alter column _enumcolumn type integer 
  using array_position(enum_range(null::_enumtype), _enumcolumn) - 1;

枚举类型的单词将分别替换为 0, 1, 2, ....。
因此,您可以在此之后自由进行所需的任何更改和更新。


推荐阅读