Re: Fwd: ecpg, libpq, y php

From: "Roberto Guevara" <cygnus2k(at)gmail(dot)com>
To: "Roberto Guevara" <cygnus2k(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Fwd: ecpg, libpq, y php
Date: 2006-11-06 13:15:55
Message-ID: 57650fe50611060515r45b7554ejc962a42c53c837fd@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El ecpgtest.pgc:

#include <stdlib.h>
#include <stdio.h>

exec sql include sqlca;

exec sql begin declare section;

int child_age;
VARCHAR child_name[100];
VARCHAR child_apel[100];
int req_age;

exec sql end declare section;

main() {

exec sql connect to tcp:postgresql://xxx.xx.xx.x:5432/xxxx as
connect_2 user xxxxxx using xxxxx;

exec sql BEGIN WORK;

req_age = 10;

exec sql DECLARE mycursor CURSOR FOR
SELECT soc_cod, soc_nom, soc_apel FROM acde.socio
;

exec sql OPEN mycursor;

exec sql FETCH NEXT IN mycursor into :child_age, :child_name, :child_apel;

if (sqlca.sqlcode < 0)
printf("error code %d, message %s, rows %d, warning %c\n",
sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc, sqlca.sqlerrd[2],
sqlca.sqlwarn[0]);

while (sqlca.sqlcode == 0) {
if (sqlca.sqlcode >= 0) {
child_name.arr[sizeof(child_name.arr) -1] = '\0';
child_apel.arr[sizeof(child_apel.arr) -1] = '\0';
printf("%-20d%-20s%-20s\n", child_age, child_name.arr, child_apel.arr );
}

exec sql FETCH NEXT IN mycursor into :child_age, :child_name, :child_apel;

if (sqlca.sqlcode < 0)
printf("error code %d, message %s, rows %d, warning %c\n",
sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc, sqlca.sqlerrd[2],
sqlca.sqlwarn[0]);

}
exec sql CLOSE mycursor;
exec sql COMMIT WORK;
exec sql disconnect all;
return EXIT_SUCCESS;

El lipqtest:

#include <stdio.h>
#include <libpq-fe.h>

static void
salir(PGconn *psql)
{
PQfinish(psql);
exit(1);
}

int main()
{

PGconn *psql;
PGresult *result;

int nFields;
int i,j;

psql = PQconnectdb("hostaddr = 'xxx.xx.xx.x' port = '5432' dbname = 'xxxx'
user = 'xxxx' password ='xxxxx' connect_timeout = '10'");

if (PQstatus(psql) != CONNECTION_OK)
{
fprintf(stderr, "libpq error: PQstatus(psql) != CONNECTION_OK\n\n");
salir(psql);
}

result = PQexec(psql,"select soc_cod, soc_nom, soc_apel from acde.socio
;");

nFields = PQnfields(result);

for (i = 0; i < nFields; i++)
printf("%-20s", PQfname(result, i));
printf("\n\n");

for (i = 0; i < PQntuples(result); i++)
{
for (j = 0; j < nFields; j++)
printf("%-20s", PQgetvalue(result, i, j));
printf("\n");
}

PQclear(result);

salir(psql);
system(". sshe.sh");

}

Estos son modificados de ejemplos de tutoriales, por lo que supongo estan
bien.
El codigo php, es:

$v_comando="./ecgptest.exe";
$v_start=microtime_float();
shell_exec($v_comando);
$v_end=microtime_float();
$v_tiempo_ecpg=($v_end - $v_start)/60;
sleep(1);
$v_comando="./libpqtest.exe";
$v_start=microtime_float();
shell_exec($v_comando);
$v_end=microtime_float();
$v_tiempo_libpq=($v_end - $v_start)/60;
sleep(1);
$v_sql="SELECT soc_cod, soc_nom, soc_apel FROM acde.socio;";
$v_start=microtime_float();
$Buffer_Socio = $obtieneDatos->obtenerDatos($v_sql);
$v_end=microtime_float();
$v_tiempo_php=($v_end - $v_start)/60;

La funcion obtener datos internamente ejecuta un
pg_fetch_all_Aux($this->consulta,"assoc");

Asi que no se que esta pasando, porque los resultados son casi siempre asi:

*PruebaConexion*
SELECT soc_cod, soc_nom, soc_apel FROM acde.socio;
------------------------------
Consulta en Ecpg:
Tiempo de la consulta: *0.00054198106129964* min.
------------------------------
Consulta en Libpq:
Tiempo de la consulta: *0.0051508506139119* min.
------------------------------
Consulta en PHP:
Tiempo de la consulta: *0.0062175472577413* min.

El día 3/11/06, Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió:
>
> Roberto Guevara escribió:
> > Hola a todos, queria comentarles que respecto a mi consulta anterior,
> > encontre tutoriales, y logre hacer ejemplos de cada una de las
> librerias, y
> > luego los probe, haciendo una comparacion. Encontre que casi siempre el
> ecpg
> > y el php directo tenian los mismos tiempos, en cambio la libpq siempre
> era
> > la mas lenta, es esto correcto?
>
> Lo dudo.
>
> Tanto PHP como ecpg usan libpq por debajo. Si tu programa con libpq
> directo es mas lento, lo mas probable es que lo hayas hecho mal ;-)
>
> > (realize el mismo query para los tres casos, y los ejecute desde una
> pagina
> > php, haciendo 2 system para los programas y usando una clase de php para
> la
> > consulta en php).
>
> Muestra los programas.
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-11-06 13:26:48 Re: Fwd: ecpg, libpq, y php
Previous Message Jaime Casanova 2006-11-06 05:19:37 Re: Fetch dentro de funciones