From: | Ernesto Quiñones "A(dot)" <ernesto(at)eqsoft(dot)net> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Unas dudas sobre "plan de ejecucion" |
Date: | 2004-11-14 13:27:29 |
Message-ID: | 1100438848.6090.12.camel@prodigy |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
ahh interesante eso de que la funcion se compila solo por conexion, en
otras motores (segun su documentacion) se compilan al momento de grabar
la funcion para que todos la invoquen
que se generen plan de ejecucion en perl, python o php lo veo dificil,
el lenguage handler tendria que ser bastante avanzado, incluo vi que en
php uno has declara una conexion asi que por ahi lo veo descartado
funciones rapidas en C solo si generan calculos fuera de los propios de
la base de datos, sino entra en el mismo saco de los otros lenguajes (en
lo que se refiere a trabajo directo a sql)
en fin interesante este dato de compilado por conexion
saludos
On Mon, 2004-11-15 at 05:17, Alvaro Herrera wrote:
> On Sat, Nov 13, 2004 at 03:36:23AM +0000, Ernesto Quiñones A. wrote:
>
> Hola,
>
> > Puede ser que este equivocado pero yo creo que no realiza un plan de
> > ejecucion, al menos no guardado estaticamente en la funcion, sino lo
> > crea al momento de interpretar el script
>
> Estas medio equivocado y medio en la razon.
>
> Las funciones efectivamente se almacenan como cadenas de texto. En el
> caso de PL/pgSQL, se toma esa cadena de texto la primera vez que se
> ejecuta la funcion en una conexion, se compila y se almacena el
> compilado en memoria. Las siguientes veces, se usa la version
> compilada. Es por este motivo que si haces una funcion que haga "DROP
> TABLE foo; CREATE TABLE foo;" va a funcionar la primera vez que la
> ejecutes en una sesion, pero la segunda te va a reclamar que no
> encuentra una relacion con el OID xxx. Pero si te desconectas y te
> vuelves a conectar, y ejecutas la funcion, se ejecuta correctamente.
>
> Otros lenguajes pueden hacer lo mismo, o puede que no. Depende de como
> este escrito el "language handler". Desconozco los detalles. (Si te
> interesa, puedes mirar el codigo fuente --- te invito a que compares con
> el codigo del manejador de PL/SQL en Oracle ... oh, espera, me dicen por
> aca que no esta disponible. Ah, que mala suerte ...)
>
> Si te interesa mucho que la funcion ande rapidisimo, escribela en C.
> Las funciones en C no se almacenan como una cadena de texto, sino como
> una biblioteca compartida (.so) que lleva codigo objeto.
--
**********************************
* Ernesto Quiñones A. *
* Gerente Técnico *
* EQ Soft Consultoría y Soporte *
* http://www.eqsoft.net *
* ernesto(at)eqsoft(dot)net *
**********************************
Visite http://www.eqsoft.net
Experiencia Profesional, Servicios, Noticias
Manuales gratis, Links de Interes, etc.
EQ Soft Consultoría y Soporte
Av. Elmer Faucet 1985 Bellavista-Callao
Telf.: 9724-4926 - 9700-3957
From | Date | Subject | |
---|---|---|---|
Next Message | FERRINSON FRANCO HERNANDEZ | 2004-11-14 21:52:47 | tcpip_socket y Permisos sobre Shemas |
Previous Message | AUGUSTO ESTEBAN | 2004-11-14 05:02:17 | Conectar con Visual Basic .NET |