Description
When generating entities from a PostgreSQL database that contains native ENUM types, sea-orm-cli generate entity --entity-format dense emits rs_type = "Enum" in the #[sea_orm(...)] attribute of the generated ActiveEnum, instead of rs_type = "String".
Enum is not a valid Rust type, so the generated sea_orm_active_enums.rs does not compile as-is. The correct value (per the documentation) might be rs_type = "String".
Steps to Reproduce
- Create a PostgreSQL native enum type and a table using it:
CREATE TYPE payment_method AS ENUM ('card', 'cash', 'check', 'transfer');
CREATE TABLE payments (
id serial PRIMARY KEY,
method payment_method NOT NULL
);
- Generate entities using the
dense format:
sea-orm-cli generate entity \
--database-url postgres://... \
--with-serde both \
--entity-format dense \
--impl-active-model-behavior=false \
-o ./src/models/_entities/
- Open the generated
src/models/_entities/sea_orm_active_enums.rs.
Expected Behavior
The generated ActiveEnum uses rs_type = "String":
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)]
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "payment_method")]
pub enum PaymentMethod {
#[sea_orm(string_value = "card")]
Card,
#[sea_orm(string_value = "cash")]
Cash,
#[sea_orm(string_value = "check")]
Check,
#[sea_orm(string_value = "transfer")]
Transfer,
}
Actual Behavior
rs_type is generated as "Enum", which is not a valid Rust type and fails to compile:
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize)]
#[sea_orm(rs_type = "Enum", db_type = "Enum", enum_name = "payment_method")]
pub enum PaymentMethod {
#[sea_orm(string_value = "card")]
Card,
// ...
}
Reproduces How Often
Always, on every entity generation, for every PostgreSQL native enum column.
Workarounds
Manually editing rs_type = "Enum" back to rs_type = "String" after each generation produces working, compiling code. Post-processing the generated file (search/replace rs_type = "Enum" → rs_type = "String") as part of the generation pipeline works around it automatically.
Versions
sea-bae v0.2.1
sea-orm v2.0.0-rc.41
sea-orm-cli v2.0.0-rc.41
sea-orm-macros v2.0.0-rc.41
sea-orm-migration v2.0.0-rc.41
sea-query v1.0.1
sea-query-derive v1.0.0
sea-query-sqlx v0.9.1
sea-schema v0.18.0
sea-schema-derive v0.3.0
- Database: PostgreSQL (via
sqlx-postgres)
- OS: macOS 26.5.1 (arm64)
--entity-format dense
Description
When generating entities from a PostgreSQL database that contains native
ENUMtypes,sea-orm-cli generate entity --entity-format denseemitsrs_type = "Enum"in the#[sea_orm(...)]attribute of the generatedActiveEnum, instead ofrs_type = "String".Enumis not a valid Rust type, so the generatedsea_orm_active_enums.rsdoes not compile as-is. The correct value (per the documentation) might bers_type = "String".Steps to Reproduce
denseformat:src/models/_entities/sea_orm_active_enums.rs.Expected Behavior
The generated
ActiveEnumusesrs_type = "String":Actual Behavior
rs_typeis generated as"Enum", which is not a valid Rust type and fails to compile:Reproduces How Often
Always, on every entity generation, for every PostgreSQL native enum column.
Workarounds
Manually editing
rs_type = "Enum"back tors_type = "String"after each generation produces working, compiling code. Post-processing the generated file (search/replacers_type = "Enum"→rs_type = "String") as part of the generation pipeline works around it automatically.Versions
sqlx-postgres)--entity-format dense