Search Postgresql Archives

Re: Plperl Question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Answers in place:

I'm trying to write a plperl function to copy the new row e.g. NEW in
plpgsql into another table.  I was looking for a similar effect to the

INSERT INTO blah VALUES (NEW.*)

Syntax that can be used in plpgsql.  So fat the best I have come up with
is:

$collist = "";
$vallist = "";
while (($col, $val) = each(%{$_TD->{new}}))
{
        $collist .= ($col.",");

        #Need to fix issues here with quoting in the value list.
        $vallist .= ("'".$val."',");
}
chop($collist);
chop($vallist);

However, this leads to issues with numerical columns being quoted, and
worse still NULL numerical column being entered as '' which results in
"Invalid syntax for integer" errors.

NULL values will have $val undefined, so you can just avoide adding them to
$collist and $vallist in the first place

next if ( ! defined $val); # don't add NULL values

as the first line of your while loop body will easily acheive this.

Numbers are trickier- you could go with the heuristic that if $val
looks like a number, it is a number and don't quote it. However then
you run into problems with number data in char columns. And then you
start thinking about your pg_catalog solution again.

The only solution I can see at present is to look up the type of each
column name in the pg_catalog tables, and based upon this, quote as
necessary.

Good luck,
Stuart.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux