On Wed, Sep 28, 2011 at 10:40 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> Alvaro Herrera <alvhe...@commandprompt.com> writes:
>> Excerpts from depstein's message of mié sep 28 07:21:17 -0300 2011:
>>> ALTER TYPE ... ADD VALUE does not work inside transaction blocks, period, 
>>> whether they are executed as a multi-command string or one query at a time. 
>>> Try it:
>
>> The reason it is not allowed is because it breaks stuff (I cannot
>> remember what).  Inconvenient, yes.  "Broken", perhaps.  But it's
>> working as designed.  If you're interested, you could examine the old
>> threads that led to this behavior and see if it can be improved.  But
>> just removing the check won't do.
>
> The comment beside the code says what it breaks:
>
>        case T_AlterEnumStmt:    /* ALTER TYPE (enum) */
>
>            /*
>             * We disallow this in transaction blocks, because we can't cope
>             * with enum OID values getting into indexes and then having their
>             * defining pg_enum entries go away.
>             */
>            PreventTransactionChain(isTopLevel, "ALTER TYPE ... ADD");
>            AlterEnum((AlterEnumStmt *) parsetree);
>            break;
>
> As Merlin says, this is not a bug.  It's a design compromise that we
> made after quite some careful consideration, and we're unlikely to
> reconsider it unless someone thinks of an actually better solution.
> You might care to review the "WIP: extensible enums" thread in
> pgsql-hackers during October 2010 to see the issues and alternatives
> that were considered.
>
> BTW, I imagine that the reason that manually adding rows to pg_enum no
> longer works with any reliability at all is that the manual procedure
> isn't cognizant of the new rules about even vs odd OIDs in pg_enum.
> Not that it really worked before --- once the OID counter wrapped
> around, you'd be pretty well screwed.  As Alvaro says, manual
> alterations of the system catalogs never have been supported, meaning
> that we will never offer a guarantee that something that (more or less)
> worked in a previous release will still work in newer ones.

Yeah -- also it's good to point out even/odd issue with pg_enum.  just
about everyone hacked pg_enum previously, and it's good to spread the
word this no longer works :-(.  That said, the new enum enhancements
(oid wraparound issue aside) ISTM I can't help but see as a somewhat
of a regression, since previously you could (hackily) work on them
in-transaction, and now you basically can't. No use in crying now, but
in the future I think any DDL that doesn't support in-transaction use
should be regarded with a great deal of skepticism.

merlin

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to