Lists: | pgsql-it-generale |
---|
From: | Giorgio Valoti <giorgio_v(at)me(dot)com> |
---|---|
To: | pgsql-it-generale(at)postgresql(dot)org |
Subject: | Volatilità funzioni |
Date: | 2009-06-11 16:50:20 |
Message-ID: | 7588F378-AA10-40EF-88A7-0EFA87208D16@me.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-it-generale |
Stavo leggendo la documentazione sulla volatilità delle funzioni <http://www.postgresql.org/docs/current/static/xfunc-volatility.html
> e mi stavo chiedendo se una funzione che al suo interno usa degli
statement di DELETE debba essere definita STABLE o VOLATILE.
Qualcuno ha informazioni precise al proposito?
Grazie
--
Giorgio Valoti
From: | Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it> |
---|---|
To: | pgsql-it-generale(at)postgresql(dot)org |
Subject: | Re: Volatilità funzioni |
Date: | 2009-06-11 17:50:22 |
Message-ID: | 20090611175022.GA18884@eee.gi |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-it-generale |
On Thu, Jun 11, 2009 at 06:50:20PM +0200, Giorgio Valoti wrote:
> Stavo leggendo la documentazione sulla volatilità delle funzioni
> <http://www.postgresql.org/docs/current/static/xfunc-volatility.html> e
> mi stavo chiedendo se una funzione che al suo interno usa degli
> statement di DELETE debba essere definita STABLE o VOLATILE.
>
> Qualcuno ha informazioni precise al proposito?
La documentazione in realtà è abbastanza precisa:
"A VOLATILE function can do anything, including modifying the
database. ..."
"A STABLE function cannot modify the database ..."
"An IMMUTABLE function cannot modify the database and ..."
Quindi dato che la funzione in oggetto modifica il database (un DELETE
è una modifica) deve essere VOLATILE.
Ciao,
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni(dot)ciolli(at)2ndquadrant(dot)it | www.2ndquadrant.it
From: | Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it> |
---|---|
To: | pgsql-it-generale <pgsql-it-generale(at)postgresql(dot)org> |
Subject: | Re: Volatilità funzioni |
Date: | 2009-06-13 20:33:45 |
Message-ID: | 20090613203345.GB3498@fune |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-it-generale |
On Sat, Jun 13, 2009 at 03:13:53PM +0200, Giorgio Valoti wrote:
>
> Il giorno 11/giu/09, alle ore 19:50, Gianni Ciolli ha scritto:
>> La documentazione in realtà è abbastanza precisa:
>>
>> "A VOLATILE function can do anything, including modifying the
>> database. ..."
>>
>> "A STABLE function cannot modify the database ..."
>>
>> "An IMMUTABLE function cannot modify the database and ..."
>>
>> Quindi dato che la funzione in oggetto modifica il database (un DELETE
>> è una modifica) deve essere VOLATILE.
>
> Grazie, non mi era chiara la distinzione fra effetto e contenuto della
> funzione, in relazione alla sua volatilità.
In effetti le parole VOLATILE, STABLE, IMMUTABLE non suggeriscono
immediatamente il significato SQL, contrariamente a quanto succede con
la gran parte delle parole chiave SQL (ad esempio INSERT, DELETE,
UPDATE,...)
La ragione per cui si parla della volatilità delle funzioni è di
aiutare la pianificazione delle query. Ecco un esempio sciocco, che
però può forse chiarire meglio cosa intendo dire.
Sia t una tabella con un milione di righe, sia f una funzione volatile
e sia g una funzione non volatile. Scrivendo la query
SELECT g(1),x FROM t;
il planner è costretto a calcolare g(1) un milione di volte, mentre in
SELECT f(1),x FROM t;
il planner sa che, se lo ritiene opportuno, può calcolare f(1) una
volta sola e copiare il risultato in tutte le 1000000 righe;
ovviamente lo farà solo se prevederà di risparmiare tempo, ad esempio
se f() è una funzione che consuma molto tempo. Infatti nel creare le
funzioni è possibile anche specificare il tempo medio di esecuzione.
Per maggiori dettagli guarda la documentazione, che è molto chiara.
Ciao
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni(dot)ciolli(at)2ndquadrant(dot)it | www.2ndquadrant.it
From: | Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it> |
---|---|
To: | pgsql-it-generale <pgsql-it-generale(at)postgresql(dot)org> |
Subject: | Re: [pgsql-it-generale] Volatilità funzioni |
Date: | 2009-06-13 20:41:12 |
Message-ID: | 20090613204112.GC3498@fune |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-it-generale |
On Sat, Jun 13, 2009 at 10:33:45PM +0200, Gianni Ciolli wrote:
> Sia t una tabella con un milione di righe, sia f una funzione volatile
> e sia g una funzione non volatile. Scrivendo la query
Errore di stampa: se avete letto le query con attenzione avete capito
che
* f è non volatile
* g è volatile
infatti:
> SELECT g(1),x FROM t;
>
> il planner è costretto a calcolare g(1) un milione di volte, mentre in
>
> SELECT f(1),x FROM t;
>
> il planner sa che, se lo ritiene opportuno, può calcolare f(1) una
> volta sola
Ciao
Dr. Gianni Ciolli - 2ndQuadrant Italia
PostgreSQL Training, Services and Support
gianni(dot)ciolli(at)2ndquadrant(dot)it | www.2ndquadrant.it