Upgrading a varchar column to enum type in postgresql Upgrading a varchar column to enum type in postgresql postgresql postgresql

Upgrading a varchar column to enum type in postgresql


You need to define a cast to be used because there is no default cast available.

If all values in the varcharColumn comply with the enum definition, the following should work:

alter table foo   ALTER COLUMN varcharColumn TYPE enum_type using varcharColumn::enum_type;

I personally don't like enums because they are quite unflexible. I prefer a check constraint on a varchar column if I want to restrict the values in a column. Or - if the list of values changes often and is going to grow - a good old "lookup table" with a foreign key constraint.


Got it.

ALTER TABLE tableName   ALTER COLUMN varcharColumn TYPE enum_type    USING varcharColumn::enum_type

will update it successfully.


you as well might consider domain type if you dont need the enum ordering property and are offput by missing delete enum value.
Domain types are user-denfiend types + constraints, which makes x out of a selection possible via CHECK & co and as such not so 'unwieldy like enums.

Typical enum is eg log levels, while domain eg email text input validation with the field being present in many tables.