Search Postgresql Archives

postmaster disconnects after heavy load inserts from plperlu -> waht to do?

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

 



Hello!

I have written a function to load yahoo quote data. abut after parsing
the inserts will overload the server and disconnects. What sould I do
to avound this?

THX
Christian Maier

PS Here the function:

CREATE OR REPLACE FUNCTION get_yahoo(VARCHAR(20), BIGINT, VARCHAR(3))
RETURNS INTEGER AS $$
   use LWP::Simple;
   use Date::Simple(':all');

   my $symbol     = $_[0];
   my $market_id  = $_[1];
   my $symbol_whg = $_[2];
   my $market_id_whg = $market_id;

   my $fi = spi_exec_query( qq { SELECT fi_id
                                        FROM fi.provider
                                       WHERE symbol = '$symbol'
                                         AND provider = 'yahoo'
                                         AND sysstatus = 0;
                                });
   my $fi_id = $fi->{rows}[0]->{fi_id};
   my $fi = spi_exec_query( qq { SELECT fi_id
                                        FROM fi.provider
                                       WHERE symbol = '$symbol_whg'
                                         AND provider = 'iso'
                                         AND sysstatus = 0;
                               });
   my $fi_id_whg = $fi->{rows}[0]->{fi_id};

   my $query = qq { SELECT max(eod_day) as lastdate
                      FROM fi.eod
                     WHERE fi_id     = $fi_id
                       AND market_id = $market_id
                       AND fi_id_whg = $fi_id_whg;
                  };

   elog(NOTICE, "$query");
   my $lastdate = spi_exec_query($query);

   my $from;
   ($from = Date::Simple->new($lastdate->{rows}[0]->{lastdate}) ) ||
            ($from = Date::Simple->new('1990-01-01') );
   my $to = today();
   my $fday = $from->day;
   my $fmon = sprintf("%02d", $from->month -1);
   my $fyea = $from->year;
   my $tday = $to->day;
   my $tmon = sprintf("%02d", $to->month -1);
   my $tyea = $to->year;

   elog(NOTICE, "$fyea-$fmon-$fday - $tyea-$tmon-$tday");

   my $content =
get("http://ichart.finance.yahoo.com/table.csv?s=$symbol&a=$fmon&b=$fday&c=$fyea&d=$tmon&e=$tday&f=$tyea&g=d&ignore=.csv";);
   elog(NOTICE, "$content");
   my @lines;
   if ($contend =~ m/\\r\\n/) {
      elog(NOTICE, "Windows");
      @lines = split ("\r\n", $content);
   } else {
      elog(NOTICE, "Unix");
      @lines = split ("\n", $content);
   }

   foreach my $line(@lines) {
      my @columns = split(/,/, $line);
      #Date,Open,High,Low,Close,Volume,Adj. Close*
      #12-Jan-07,30.10,31.17,30.05,30.79,9466200,30.79
      if ($columns[0] != "Date") {
         $columns[0] =~ s/Jan/01/;
         $columns[0] =~ s/Feb/02/;
         $columns[0] =~ s/Mar/03/;
         $columns[0] =~ s/Apr/04/;
         $columns[0] =~ s/May/05/;
         $columns[0] =~ s/Jun/06/;
         $columns[0] =~ s/Jul/07/;
         $columns[0] =~ s/Aug/08/;
         $columns[0] =~ s/Sep/09/;
         $columns[0] =~ s/Oct/10/;
         $columns[0] =~ s/Nov/11/;
         $columns[0] =~ s/Dec/12/;

         my @date = split(/-/, $columns[0]);
         $columns[0] = $date[2] . "-" . $date[1] . "-" .
sprintf("%02d", $date[0]);
         $insert = qq{ INSERT INTO
fi.eod(fi_id,fi_id_whg,market_id,market_id_whg,eod_day,o,h,l,c,vo)
                                       VALUES($fi_id, $fi_id_whg,
$market_id, $market_id_whg, $columns[0],
                                              $columns[1], $columns[2],
$columns[3], $columns[4], $columns[5]);  };
         elog(NOTICE, "$insert");
         #this occours the crash
         spi_exec_query( $insert );
      } #end if
   }#end each line
   1;
$$ LANGUAGE plperlu;



[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