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 - co...@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-ow...@postgresql.org [mailto:pgsql-es-ayuda-ow...@postgresql.org] En nombre de Edwin Quijada Enviado el: lunes, 25 de mayo de 2009 12:42 Para: pgsql-es-ayuda@postgresql.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 majord...@postgresql.org) __________ Information from ESET Smart Security, version of virus signature database 4101 (20090525) __________ The message was checked by ESET Smart Security. http://www.eset.com __________ Information from ESET Smart Security, version of virus signature database 4103 (20090525) __________ The message was checked by ESET Smart Security. http://www.eset.com -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html