On Mon, Mar 28, 2011 at 9:54 AM, Merlin Moncure <mmonc...@gmail.com> wrote:
> On Mon, Mar 28, 2011 at 9:47 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
>> Bug #5950 proposes the following test case:
>>
>> create table t ();
>> alter table t add childs t;
>> alter table t add id serial not null primary key;
>>
>> Most of the back branches dump core because CheckAttributeType() goes
>> into infinite recursion.  That doesn't happen in HEAD, but so far as I
>> can see that's just because of some chance rearrangement of the order of
>> operations in ALTER TABLE.  I wouldn't be at all surprised if there are
>> related cases where HEAD fails too.
>>
>> I think the most straightforward and reliable fix for this would be to
>> forbid recursive containment of a rowtype in itself --- ie, the first
>> ALTER should have been rejected.  Can anyone think of a situation where
>> it would be sane to allow such a thing?
>
> Well, maybe. In fact, probably.  That's like asking in C if it's sane
> to have a structure to contain a pointer back to itself, which of
> course it is.  That said, if it doesn't work properly, it should
> probably be disabled until it does.

hm, you can work around lack of above at present using two vs one types:
postgres=# create table b ();
postgres=# create table c ();
postgres=# alter table b add c c;
postgres=# alter table c add b b;
postgres=# alter table c add i int;
postgres=# alter table b add j int;
postgres=# select row(row(null, 1), 1)::b;
    row
------------
 ("(,1)",1)

This isn't great but might cover some of the cases where you need such
a thing (and I tested this on 8.1).

merlin

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

Reply via email to