Re: Dynamic insert into ARRAY? plpgsql

From: David Johnston <polobo(at)yahoo(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Dynamic insert into ARRAY? plpgsql
Date: 2014-02-08 20:41:36
Message-ID: 1391892096423-5791092.post@n5.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

George Ant wrote
> Hey Guys,
>
> I have a table(Orders_object_table) of this type:
>
> CREATE TYPE orders_type AS
> (orderid integer,
> amount amount_type,
> customerid integer,
> orderdate date,
> orderlines orderlines_type[]);
>
> and I am trying to insert data from another tables(Orders and Orderlines).
> Each Order has many Orderlines but I dont know the number.
>
> I use this :
>
> CREATE OR REPLACE FUNCTION Copy_Orders_Data() RETURNS integer as $BODY$
> BEGIN
>
> INSERT INTO "Orders_object_table" (...,orderlines,...)
> SELECT ...,ARRAY[row(ol."OrderlineId", ol."Quantity",
> ol."Prod_id")::orderlines_type], ...
> FROM "Orders" o
> INNER JOIN "Orderlines" ol
> ON o."OrderId" = ol."OrderId"
> WHERE o."OrderId" >=1 AND o."OrderId" <=12000;
> END;
>
> but it gives me an error. (IT tries to create many rows for each Order
> which returns duplicate PK OrderId)
>
> How can I find how many orderlines have each row, and then insert them in
> one row? Each row of the Orders_object_table must have a unique PK OrderId
> , and a column with all the Orderlines this Order has.
>
> Thank you in advance :)
>
> Kind Regards,
> George Ant

Use either:

Array( sub-select )
or
Array_agg( col ) w/ a GROUP BY query

David J.

--
View this message in context: http://postgresql.1045698.n5.nabble.com/Dynamic-insert-into-ARRAY-plpgsql-tp5791090p5791092.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message alexandros_e 2014-02-08 20:42:44 Re: Dynamic insert into ARRAY? plpgsql
Previous Message George Ant 2014-02-08 20:35:49 Dynamic insert into ARRAY? plpgsql