Skip site navigation (1) Skip section navigation (2)

Re: Vol?==?iso-8859-1?Q?atilità funzioni

From: Gianni Ciolli <gianni(dot)ciolli(at)2ndquadrant(dot)it>
To: pgsql-it-generale <pgsql-it-generale(at)postgresql(dot)org>
Subject: Re: Vol?==?iso-8859-1?Q?atilità funzioni
Date: 2009-06-13 20:33:45
Message-ID: 20090613203345.GB3498@fune (view raw or flat)
Thread:
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


In response to

Responses

pgsql-it-generale by date

Next:From: Gianni CiolliDate: 2009-06-13 20:41:12
Subject: Re: [pgsql-it-general?==?iso-8859-1?Q?e] Volatilità funzioni
Previous:From: gabriele.bartoliniDate: 2009-06-12 11:14:38
Subject: Novità SQL in PostgreSQL 8.4

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group