Thread

  1. Re: [QUESTIONS] using composite types

    Brian Grossman <brian@softhome.net> — 1998-03-15T23:50:15Z

    > On Fri, 13 Mar 1998, Thomas G. Lockhart wrote:
    > 
    > > > How can I use composite types?
    > > > If I create two tables like this:
    > > >         create table A ( a int, b int);
    > > >         create table D ( a A, b int);
    > > > I would expect to be able to
    > > >         insert into D (a.a, a.b, b) values (1,2,3);
    > > > and
    > > >         select a.a, a.b, b from D;
    > > > That doesn't work, at least not with postgresql 6.3.  Is that the way
    > > > it's supposed to work?  What is the proper way to do it?
    > 
    > I've just tried it here, and it seems that the value to insert into D is
    > the OID of a row in table A.
    > 
    > > I'm not sure if this is supported. The old tutorial does not have an
    > > example exactly like this (at least that I could find), but it seems
    > > like it _should_ work, and the backend accepts the syntax.
    > > 
    > > What you want to do can probably be accomplished with inheritance, but
    > > that only seems to work if you have unique names for more of your
    > > fields:
    > > 
    > >   create table A ( a int, b int);
    > >   create table D ( c int) inherits (A);
    > > 
    > But, if you try
    > > 
    > >   create table D ( b int) inherits (A);
    > > 
    > > then the new column in D gets lost without warning!
    
    > This would give a table based on the parent table, but I think he was
    > trying to use table D to refer to values in table A _as_ a type.
    
    Yes, I am trying to use A as a type.  I was hoping there was some syntax
    sugar that I was missing; the C-like struct traversal syntax would have
    been nice, but oh well.  I see how an oid could work, but the idea was to
    make my life as a programmer easier.  I'll just prepend the A_ to a and b
    in A and inherit, so I can "select A_a, A_b, b from D".  I got lucky and
    all my prefixed names fit in under the 32 character name limit.
    
    Thanks,
    Brian