From: | "Mario Soto Cordones" <msotocl(at)gmail(dot)com> |
---|---|
To: | "'Edwin Quijada'" <listas_quijada(at)hotmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: SQL en function en C |
Date: | 2009-05-26 00:14:25 |
Message-ID: | 000001c9dd96$f2840120$d78c0360$@com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Edwin,
Te adjunto un script en C++ , el cual lo tengo corriendo en Linux,y que hace
lo que tu quieres, se conecta a postgrSQL y ejecuta sentencias SQL
Para actualizar vistas materializadas.. por medio de querys
asincrónicos, para lo cual Utilizo la librería libpq.
Espero te sirva
/*
* vasaf_systbl1_libpq_01.c
*
*
* Demonio para actualizar la vista materializada
'public._saf_systbl_1_vis_modelos_mv';
*
*
* Creado por : Ing. Mario Alberto Soto Cordones;
* Version : 1.0;
* Fecha : Septiembre 2005;
* Sistema : Saf;
* Plataforma : Linux Fedora Core 4;
*
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/time.h>
#include "libpq-fe.h"
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(1);
}
int
main(int argc, char **argv)
{
char *paso;
const char *autinfo;
const char *conninfo;
PGconn *conn;
PGresult *res;
PGnotify *notify;
int nnotifies;
int sock;
fd_set input_mask;
if (argc > 1)
conninfo = argv[1];
else
conninfo = "dbname = compuall";
conn = PQconnectdb(conninfo);
if (PQstatus(conn) != CONNECTION_OK)
{
fprintf(stderr, "Conexion a la Base de Datos fallo: %s",
PQerrorMessage(conn));
exit_nicely(conn);
}
autinfo = "(c)Ing. Mario Soto Cordones - Compu(at)ll Ingeniería\n";
res = PQexec(conn, "LISTEN saf_systbl1_vis_modelos_mv");
res = PQexec(conn, "LISTEN his_estadis_mv");
res = PQexec(conn, "LISTEN his_estadis_mv_sahidep");
res = PQexec(conn, "LISTEN contabilidad.his_sahidep_mv");
res = PQexec(conn, "LISTEN his_estadis_mv_sahiaju");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "comando LISTEN fallo: %s",
PQerrorMessage(conn));
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
nnotifies = 0;
while ((nnotifies == 0))
{
sock = PQsocket(conn);
if (sock < 0)
break;
FD_ZERO(&input_mask);
FD_SET(sock, &input_mask);
if (select(sock + 1, &input_mask, NULL, NULL, NULL) < 0)
{
fprintf(stderr, "select() fallo: %s\n",
strerror(errno));
nnotifies = 1;
exit_nicely(conn);
}
PQconsumeInput(conn);
while ((notify = PQnotifies(conn)) != NULL)
{
paso = notify->relname;
if (strcmp(paso,"saf_systbl1_vis_modelos_mv") == 0)
{
conninfo = "SELECT
refresh_matview('public._saf_systbl_1_vis_modelos_mv')";
}
if (strcmp(paso,"his_estadis_mv") == 0 )
{
conninfo = "SELECT
refresh_matview('contabilidad.his_estadis_mv')";
}
if (strcmp(paso,"his_estadis_mv_sahidep") == 0)
{
conninfo = "SELECT
refresh_matview('contabilidad.his_estadis_mv')";
}
if (strcmp(paso,"contabilidad.his_sahidep_mv") == 0)
{
conninfo = "SELECT
refresh_matview('contabilidad.his_sahidep_mv')";
}
if (strcmp(paso,"his_estadis_mv_sahiaju") == 0)
{
conninfo = "SELECT
refresh_matview('contabilidad.his_estadis_mv')";
}
fprintf(stderr,
"Sistema Saf ha recibido un ASYNC
NOTIFY de '%s' , desde el backend pid %d\n",
notify->relname, notify->be_pid);
fprintf(stderr, "Actualizando Vista
Materializada...\n");
res = PQexec(conn, conninfo);
fprintf(stderr, "Actualizacion de Vista
Materializada OK.\n");
fprintf(stderr, autinfo);
PQfreemem(notify);
PQclear(res);
}
}
PQfinish(conn);
return 0;
}
atentamente,
Mario Soto Cordones
Porfavor antes de Imprimir éste correo, piense en los árboles de nuestro
planeta.
-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Edwin Quijada
Enviado el: lunes, 25 de mayo de 2009 12:42
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: [pgsql-es-ayuda] SQL en function en C
Hola!
He creado una pequena funcion en C para una tarea ahora necesito desde la
misma funcion poder hacer un select y ese resultado trabajarlo en mi
funcion.
Hasta ahora solo he ehcho cosas simples pero no se como puedo tomar la
informacion que me genera un select y poder usarla dentro de C en la funcion
que estoy creando.
Alguien puede decirme como puedo hacer esto. Estaba viendo el asunto de SPI
pero no se si es con esto que se hace. Alguien tiene algun ejemplo en C de
al menos un select que se haga y poder usarlo dentro de la funcion?
*-------------------------------------------------------*
*-Edwin Quijada
*-Developer DataBase
*-JQ Microsistemas
*-809-849-8087
* " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de lo
comun"
*-------------------------------------------------------*
_________________________________________________________________
Windows Live Hotmail now works up to 70% faster.
http://windowslive.com/Explore/Hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_faster_
112008--
TIP 2: puedes desuscribirte de todas las listas simultáneamente
(envía "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)
__________ Information from ESET Smart Security, version of virus signature
database 4101 (20090525) __________
The message was checked by ESET Smart Security.
__________ Information from ESET Smart Security, version of virus signature
database 4103 (20090525) __________
The message was checked by ESET Smart Security.
From | Date | Subject | |
---|---|---|---|
Next Message | Fernando Moreno | 2009-05-26 03:18:01 | Re: Mejorar update |
Previous Message | Alvaro Herrera | 2009-05-25 23:25:26 | Re: Problema con client_encoding='WIN1251' y base de datos UTF8 |