Thread: composite type insert

composite type insert

From
Ron Peterson
Date:
I'm trying to understand how to insert a composite type value.  I'm
having trouble with the last sql statement below.  It errors out with:

ERROR:  cannot cast type record to atype

How should I create a composite type value out of columns a and b in
table tt that I can insert into table atable?

CREATE TYPE atype AS (
  acol
    TEXT,
  bcol
    TEXT
);

CREATE TABLE atable (
  aval
    atype
);

CREATE TEMP TABLE
  tt
AS
  SELECT 'aaa'::text AS a, 'bbb'::text AS b;

INSERT INTO
  atable
SELECT
  ROW(a, b)
FROM
  tt;

Thanks as always.

--
Ron Peterson
https://www.yellowbank.com/

Re: composite type insert

From
Tom Lane
Date:
Ron Peterson <ron.peterson@yellowbank.com> writes:
> How should I create a composite type value out of columns a and b in
> table tt that I can insert into table atable?

Hm, it works for me with an explicit cast:

INSERT INTO
  atable
SELECT
  ROW(a, b)::atype
FROM
  tt;

Perhaps we should allow this in an automatic or even implicit cast
context.

            regards, tom lane

Re: composite type insert

From
Ron Peterson
Date:
On Sun, Nov 19, 2006 at 02:09:11AM -0500, Tom Lane wrote:
> Ron Peterson <ron.peterson@yellowbank.com> writes:
> > How should I create a composite type value out of columns a and b in
> > table tt that I can insert into table atable?
>
> Hm, it works for me with an explicit cast:
>
> INSERT INTO
>   atable
> SELECT
>   ROW(a, b)::atype
> FROM
>   tt;
>
> Perhaps we should allow this in an automatic or even implicit cast
> context.

Ah, I can certainly live with a cast.  I didn't realize that creating a
composite type with 'create type' also automatically created a cast.  I
should have at least tried that.  Maybe section 8.11 (Composite Types)
or the 'CREATE TYPE' section of the docs should mention this?

Best.

--
Ron Peterson
https://www.yellowbank.com/