Re: How do I insert and update into a table of arrays of composite types via a select command?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Celia McInnis <celia(dot)mcinnis(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How do I insert and update into a table of arrays of composite types via a select command?
Date: 2017-10-25 19:47:01
Message-ID: 21511.1508960821@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Celia McInnis <celia(dot)mcinnis(at)gmail(dot)com> writes:
> My first question is: HOW do I populate this table, at first with arrays
> containing one element from the t_composite table?
> I have tried various things with no success.

You didn't say what you tried, but I imagine it was something like

regression=# insert into t_array select array[row('a','b','c'),row('d','e','f')];
ERROR: column "data_array" is of type mytype[] but expression is of type record[]
LINE 1: insert into t_array select array[row('a','b','c'),row('d','e...
^
HINT: You will need to rewrite or cast the expression.

Like it says, you need a cast. You can either cast the array elements
individually:

regression=# insert into t_array select array[row('a','b','c')::mytype,row('d','e','f')::mytype];
INSERT 0 1

or just cast the whole ARRAY[] construct:

regression=# insert into t_array select array[row('a','b','c'),row('d','e','f')]::mytype[];
INSERT 0 1

although I think the latter only works in relatively late-model
Postgres, and it might make parsing a bit slower too.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Rob Sargent 2017-10-25 20:59:27 query not scaling
Previous Message Celia McInnis 2017-10-25 19:34:44 How do I insert and update into a table of arrays of composite types via a select command?