Luego del impulso que nos dio Alvaro con la documentacion de SPI avanzamos un monton. Estamos manejando cursores, estamos haciendo las consultas, mergeando tablas antes de devolverlas, etc. Peeeero...
Estamos teniendo un nuevo problemita:
Desde un stored procedure estamos haciendo secuencialmente lo siguiente:
- Creamos una tabla temporal.
- Insertamos en la tabla temporal rows que sacamos de otra (usando un stored procedure).
- Después leemos dicha tabla temporal para mostrar los rows en pantalla.
Y lo que debería traernos los rows de la tabla temporal, no hace más que decirnos que la tabla está vacía. Si después hacemos una consulta sobre la misma tabla, nos muestra los datos insertados correctamente.
Nos da la sensación de que el select final se está ejecutando antes que el insert, a pesar de ser llamados secuencialmente. Llegamos a esta conclusión porque también probamos de usar una tabla no temporal donde insertar los datos, y nos mostraba la información que había antes de la inserción. También probamos de hacer un begin y un comit encerrando los primeros dos pasos, pero no cambió el problema.
Revisando en la documentación de SPI encontramos la siguiente línea en el detalle de spi_execute:
It is generally unwise to mix read-only and read-write commands within a single function using SPI; that could result in very confusing behavior, since the read-only queries would not see the results of any database updates done by the read-write queries.
Pero nosotros necesitaríamos hacer esto mismo que está desaconsejado :'(
Alguna idea?
Gracias totales.
Saldudos cordiales
Emiliano
El día 25 de abril de 2008 16:37, Emiliano Moscato <moski666@gmail.com> escribió:
En el fragor del trabajo se me había olvidado agradecerte :)
Me fueron muy utiles los links, no lo había visto en la documentación de Postgres porque está separado de lo que es Stored Procedures en C (Cap 39 creo recordar).
Gracias, los seguiré molestando en breve :)
Saludos
Emiliano2008/4/24 Alvaro Herrera <alvherre@commandprompt.com>:Emiliano Moscato escribió:
> Hola,Mira la documentacion de SPI_exec aca:
>
> Estoy empezando a hacer unas cositas con stored procedures escritos en C. Si
> bien voy a hacer algunas cosas complejas, estoy tratando de entender como
> usarlo. Los ejemplos que llevo encontrados hacen o un sencillo "hello world"
> o "add_one" o van directamente a un "crosstab" que hace cosas demasiado
> complicadas para el nivel en el que estoy hoy por hoy, lo que hace q me
> cueste bastante entender como se hace algo relativamente simple: una función
> "query()" que reciba un string, lo ejecute asumiendo que es un query SQL y
> devuelva el resultado.
http://www.postgresql.org/docs/8.3/static/spi-spi-exec.html
Aca hay un ejemplo
http://www.postgresql.org/docs/8.3/static/spi-examples.html
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
--
TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
--
mOsKi
"No hay nada que uno haga mal , lo que hay es poco vino." Autor Anonimo
--
mOsKi
"No hay nada que uno haga mal , lo que hay es poco vino." Autor Anonimo
No comments:
Post a Comment