Thread: pg_pconnect+PostgreSQL cursors

pg_pconnect+PostgreSQL cursors

From
sector119@mail.ru
Date:
Hi all

<?
$connection = pg_pconnect("dbname=$db user=$user password=$password");
if (!isset($page))
{
    pg_exec($connection, "BEGIN WORK");
    pg_exec($connection, "DECLARE all_data CURSOR FOR SELECT id,body FROM test")
}

$result = pg_exec($connection, "FETCH 1 FROM all_data");
$info = pg_fetch_array($result, 0);
print "|$info[0]|$info[1]|<br>\n";
?>

When I execute this script at first without page parameter I'v got data to info array! when I execute it at other times
I'vgot nothing :( 

I've got closing of cursor and transaction! why??? I use permanent connection, why I've got closing of cursor and
transaction!???

--
WBR, sector119

Re: pg_pconnect+PostgreSQL cursors

From
Andrew McMillan
Date:
On Fri, 2002-12-27 at 19:10, sector119@mail.ru wrote:
> Hi all
>
> <?
> $connection = pg_pconnect("dbname=$db user=$user password=$password");
> if (!isset($page))
> {
>     pg_exec($connection, "BEGIN WORK");
>     pg_exec($connection, "DECLARE all_data CURSOR FOR SELECT id,body FROM test")
> }
>
> $result = pg_exec($connection, "FETCH 1 FROM all_data");
> $info = pg_fetch_array($result, 0);
> print "|$info[0]|$info[1]|<br>\n";
> ?>
>
> When I execute this script at first without page parameter I'v got
> data to info array! when I execute it at other times I'v got nothing
> :(
>
> I've got closing of cursor and transaction! why??? I use permanent
> connection, why I've got closing of cursor and transaction!???

I'm not sure, from your description, but it may be something to do with
the fact that Apache allocates a server process to serve requests in a
round-robin fashion.

If you use Persistent connections, you will (most likely) get a
different database connection for each request (the apache process
connects persistently to the database, but your client session doesn't
connect persistently to any given apache process).

So it could be that you are seeing a previously opened cursor - default
Apache setups for development usually only have five processes serving
requests, so they go round fairly quickly.

If this is the case, I would imagine you would be seeing all sorts of
other wierd side-effects as well.

In general, cursors aren't the right answer to the problem when doing
web development.  Personally I have _never_ found a web problem which
they are suited to with PostgreSQL (although I have with Oracle).

PostgreSQL's " OFFSET <x> LIMIT <y> " functionality has been quite
useful, however.

Regards,
                    Andrew.
--
---------------------------------------------------------------------
Andrew @ Catalyst .Net.NZ Ltd, PO Box 11-053, Manners St,  Wellington
WEB: http://catalyst.net.nz/         PHYS: Level 2, 150-154 Willis St
DDI: +64(4)916-7201     MOB: +64(21)635-694    OFFICE: +64(4)499-2267
           Survey for nothing with http://survey.net.nz/
---------------------------------------------------------------------