Thread: how to create a new composite type using already existing composite types
Hi,
For example,
CREATE TABLE inventory_item ( name text, supplier_id integer REFERENCES suppliers, price numeric CHECK (price > 0) );
produces the following type automatically
CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric );
but I'd also like to have a type with an extra column for certain functions
CREATE TYPE inventory_item2 AS ( name text, supplier_id integer, price numeric,
size integer
);
but it would be handy if I could reuse inventory_item instead of having to retype the whole lot. I can't work out or find the right syntax, can anyone show me how? Any help would be much appreciated.
Regards
Iain
On Wed, 2010-02-10 at 03:46 +0000, Iain Barnett wrote: > CREATE TYPE inventory_item2 AS ( > name text, > supplier_id integer, > price numeric, > size integer > ); > > > but it would be handy if I could reuse inventory_item instead of > having to retype the whole lot. I can't work out or find the right > syntax, can anyone show me how? Any help would be much appreciated. What about: CREATE TYPE inventory_item2 AS ( ii inventory_item, size integer ); or: CREATE TABLE inventory_item2 ( LIKE inventory_item, size integer ); and that will automatically create the type. Regards, Jeff Davis
Re: how to create a new composite type using already existing composite types
From
Merlin Moncure
Date:
On Sat, Feb 13, 2010 at 7:24 PM, Jeff Davis <pgsql@j-davis.com> wrote: > On Wed, 2010-02-10 at 03:46 +0000, Iain Barnett wrote: > >> CREATE TYPE inventory_item2 AS ( >> name text, >> supplier_id integer, >> price numeric, >> size integer >> ); >> >> >> but it would be handy if I could reuse inventory_item instead of >> having to retype the whole lot. I can't work out or find the right >> syntax, can anyone show me how? Any help would be much appreciated. > > What about: > > CREATE TYPE inventory_item2 AS ( > ii inventory_item, > size integer > ); > > or: > > CREATE TABLE inventory_item2 ( > LIKE inventory_item, > size integer > ); Pretty neat. I wasn't aware you could mix LIKE with explicit field declarations. Those expressions produce different results...the first creates a type within a type (nested) and the second creates a new unnested type based on the fields of the original type. The first expression creates a dependency while the second does not. This flexibility is only possible if you create types with the 'create table' statement. merlin