pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: codeWarrior <gpatnude@hotmail.com>
To: pgsql-sql@postgresql.org
Subject: Re: executing dynamic commands
Date: Tue, 7 Feb 2006 07:53:33 -0800
Message-ID: <dsafoe$2ouf$1@news.hub.org> (raw)
References: <15802822.125111138807576371.JavaMail.servlet@kundenserver>

In your function why not create a temporary table then use that for your 
processing ?

CREATE TEMPRORARY TABLE tabledest AS (SELECT * FROM tblsrc WHERE condition);


<christian.michels@eifelgeist.com> wrote in message 
news:15802822.125111138807576371.JavaMail.servlet@kundenserver...
> Hi,
>
> I user PostgreSQl 8.0.4 on Win2003 Server and write a function to copy 
> rows from one table into another table with the same column definition.
> My first approach was to use something like:
>
> query_value :=  'INSERT INTO ' || tabledest || ' SELECT * FROM ' || 
> tablesrc;
> EXECUTE query_value;
>
> This only works if the column definition AND the order between source and 
> destination is the same !
> In my case I have always the same column definitions but they are not in 
> the same order between source and destination table.
> What I tryed then is to loop through the column definition of the source 
> and query the sourcetable for the value. For that I have to execut a query 
> with dynamic tablename and dynamic columname to generate two stings one 
> with the columndefinitin and one with the columnvalues to exececute 
> something like: INSERT INTO tabelfoo (columndefinitinstring) VALUES 
> (columnvaluesstring)
>
> see snip of function:
>
> fieldvalues RECORD;
> output  RECORD;
> insertvalues VARCHAR;
> fieldname VARCHAR;
>
>
> -- Get Attribute List from Table and write it to output
> -- Read Values of Fieldname from source
> query_value :=  'select * from ' || tablesrc ;
>
> FOR fieldvalues IN EXECUTE query_value LOOP
>
>  FOR output IN SELECT a.attnum,
>    a.attname AS field,
>    FROM
>      pg_class c,  pg_attribute a,  pg_type t
>    WHERE
>      c.relname = tablesrc  AND
>      a.attnum > 0  AND
>      a.attrelid = c.oid  AND
>      a.atttypid = t.oid
>    ORDER BY a.attnum LOOP
>
>     -- Read Field Name from Out Table
>     fieldname := output.field;
>
>     -- Write Field Name into Variable
>     IF insertcolumns IS NULL THEN
>       insertcolumns := fieldname;
>     ELSE
>       insertcolumns := insertcolumns || ',' || fieldname;
>     END IF;
>
> Until here everyting is fine ... but now I try to query  the value from 
> RECORD fieldvalues with the columname fieldname variable from the inner 
> loop !
> I tryed the following ...
>
> query_value :=  'select quote_ident(' || fieldvalues || ').quote_literal(' 
> || fieldname ||')';
>
> EXECUTE query_value;
>
>
> and I get the following error message ...
>
> ERROR:  could not find array type for data type record
> CONTEXT:  SQL statement "SELECT  'select quote_ident(' ||  $1  || 
> ').quote_literal(' ||  $2  ||')'"
> PL/pgSQL function "prx_db__appendtable" line 87 at assignment
>
>
>      END LOOP;
>
>    END LOOP;
>
> I know the function is not runnable, but my question is  how can I 
> dynamically combine "fieldvalues"."fieldname" to read the values column by 
> colum out if a RECORD variable to generate the "columnvaluesstring" 
> mentioned above ?!
> Maybe this approach is to complicated and there is a quick and easy 
> solution ?!
>
> Any help is very much appreciated !!
>
> Thanx a lot & Regards
>
> Chris
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
>       choose an index scan if your joining column's datatypes do not
>       match
> 





view thread (6+ messages)

Message-ID: <dsafoe$2ouf$1@news.hub.org>
Permalink:  ../dsafoe$2ouf$1@news.hub.org/
Also on:    postgresql.org/message-id/dsafoe$2ouf$1@news.hub.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: gpatnude@hotmail.com
  Subject: Re: executing dynamic commands
  In-Reply-To: <dsafoe$2ouf$1@news.hub.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox