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.
>
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 |