On Thu, Mar 31, 2016 at 10:25 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Melvin Davidson <melvin6...@gmail.com> writes:
> > On Thu, Mar 31, 2016 at 9:24 AM, Nik Mitev <n...@mitev.eu> wrote:
> >>> In summary, I am looking for the opposite functionality to 'ALTER TYPE
> >>> typename ADD VALUE IF NOT EXISTS new_value'
> >>> e.g. 'ALTER TYPE typename DELETE VALUE IF NOT USED unused_value'.
>
> > It is not easy to delete values from enums, but it can be done.
>
> No, it is NOT SAFE TO DO THAT.  At least not unless you also drop or
> reindex every index on columns of the enum type.  Even if you've deleted
> every occurrence of the target value appearing in table rows, and vacuumed
> away those rows so that their leaf index entries are gone, the target
> value could still exist in upper index pages (as a page boundary value,
> for example).  Delete the pg_enum entry and you'll break the index,
> because enum_cmp() won't know what to do when visiting that index entry.
>
> Concerns like this are exactly why there is no ALTER TYPE DELETE VALUE,
> and probably never will be.  If you need a non-fixed set of key values,
> you're much better off using a foreign key instead of an enum type.
>
>                         regards, tom lane
>


AS NOTED IN MY LAST LINE > "That being said "ENUMS are EVIL"! As others
have said, it is much better to just just Foreign Keys for value
integrity."

I have previous advised that enums are a holdover from before Foreign Keys
were available and should be avoided.

-- 
*Melvin Davidson*
I reserve the right to fantasize.  Whether or not you
wish to share my fantasy is entirely up to you.

Reply via email to