Re: PL/pgSQL Copy data from one table to another

Поиск
Список
Период
Сортировка
От ChoonSoo Park
Тема Re: PL/pgSQL Copy data from one table to another
Дата
Msg-id CACgbiFvh9rhD2azNWYba9Xzq_L0cmr-F=_4MypRmUSrPWaPWiA@mail.gmail.com
обсуждение исходный текст
Ответ на PL/pgSQL Copy data from one table to another  (George Ant <g.antonopoulos000@gmail.com>)
Ответы Re: PL/pgSQL Copy data from one table to another  (Elliot <yields.falsehood@gmail.com>)
Список pgsql-general
On Wed, Feb 5, 2014 at 7:53 AM, George Ant <g.antonopoulos000@gmail.com> wrote:
Hey Guys,

I am trying to copy data from one table to another using plpgsql. The two
tables have different structure cause the new one is object-table. My
function is this :

CREATE OR REPLACE FUNCTION copy_customers() RETURNS integer as $BODY$
DECLARE
     idcounter integer := 1;
     firstname text;
     lastname text;
     address1 text;
     address2 text;
     city text;
     state text;
     zip text;
     country text;
     region text;
BEGIN
FOR idcounter In 1..20000
LOOP

        -- Add the values into the variables.
        SELECT
"FirstName","LastName","Address1","Address2","City","State","Zip","Country","Region"
        INTO firstname, lastname,address1,address2,city,state,zip,country,region
        FROM "Customers"
        WHERE "CustomerId" = idcounter;

        --Insert the variables to the new table.
        INSERT INTO "Customers_object_table" (customerid , firstname, lastname,
address)
VALUES(idcounter,firstname,lastname,(address1,address2,city,state,zip,country,region));
END Loop;

return 1;
END;
$BODY$
LANGUAGE plpgsql;


This function is working fine, but the problem is that the table "Customers"
has more than 20 columns, so the code is ugly and unmaintainable. Also I
want to do the same job for 10 more tables.

Can somebody help me to change this function in a way that I won't have to
declare the columns?

Notice that the destination-tables are object tables and can be different
than the old tables, so I am not sure if what I ask is possible.

Kind Regards,
George Ant



--
View this message in context: http://postgresql.1045698.n5.nabble.com/PL-pgSQL-Copy-data-from-one-table-to-another-tp5790663.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.


--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

I assume you created a composite type (addresstype) in Customers_object_table.

CREATE OR REPLACE FUNCTION copy_customers() RETURNS integer as $BODY$
BEGIN

    INSERT INTO Customers_object_table (customerid, firstname, lastname, address)
    SELECT c.customerid, c.firstname, c.lastname, (c.address1, c.address2, c.city, c.zip, c.country, c.region)::addresstype
    FROM Customers c
    WHERE c.customerid >= 1 AND c.customerid <= 20000;

    RETURN 1;
END
$BODY$
LANGUAGE plpgsql;

В списке pgsql-general по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Temporary table already exists
Следующее
От: mephysto
Дата:
Сообщение: Re: Temporary table already exists