On Fri, Dec 21, 2012 at 10:45 AM, Christian Hammers <c...@lathspell.de> wrote:

> Hallo
>
> A function that is used as part of an index has at least to be declared
> immutable:
>
>  devel_np=# CREATE OR REPLACE FUNCTION f() RETURNS int AS $$ BEGIN return
> (random()*100)::int; END; $$ VOLATILE LANGUAGE plpgsql;
>  CREATE FUNCTION
>
>  devel_np=# CREATE INDEX ON t (f(), i);
>  ERROR:  functions in index expression must be marked IMMUTABLE
>
> Of couse, you can just declare your function as "IMMUTABLE" and still call
> random() or access other tables in it if you think you know what you're
> doing.
>
> (I wonder if it's somehow possible to get PostgreSQL into an endless loop
> or
> crash by doing an ORDER BY which uses an index that returns random
> values...)
>

   Good, ingenious way to make crazy a DBA ;)

   Thanks again!


> bye,
>
> -christian-
>
>
> On Fri, 21 Dec 2012 10:31:43 -0200
> Alex Pires de Camargo <acama...@gmail.com> wrote:
>
> > Thanks a lot!
> >
> > From documentation:
> >
> > "
> > IMMUTABLE indicates that the function cannot modify the database and
> always
> > returns the same result when given the same argument values; that is, it
> > does not do database lookups or otherwise use information not directly
> > present in its argument list. If this option is given, any call of the
> > function with all-constant arguments can be immediately replaced with the
> > function value.
> > "
> >
> > I understand that to be immutable a function should not access mutable
> data.
> >
> > If my function access another table that I have guarantee that it will
> not
> > be changed, It's safe to turn that function immutable and use in an
> index?
> > I know that i'll be punished if my guarantee fails...
> >
> > Regards,
> >
> >
> > On Fri, Dec 21, 2012 at 10:12 AM, Christian Hammers <c...@lathspell.de>
> wrote:
> >
> > > Hello
> > >
> > > On Fri, 21 Dec 2012 08:46:14 -0200
> > > Alex Pires de Camargo <acama...@gmail.com> wrote:
> > >
> > > > Is it possible?
> > > >
> > > >    Thanks!
> > >
> > > Why not?
> > >
> > >  devel_np=# CREATE TABLE t (i int);
> > >  CREATE TABLE
> > >
> > >  devel_np=# CREATE INDEX ON t (length(i::text), i);
> > >  CREATE INDEX
> > >
> > > bye,
> > >
> > > -christian-
> > >
> >
> >
> >
>
>
> --
> Network Engineering & Design; Content Delivery Platform & IP
>
> NETCOLOGNE Gesellschaft für Telekommunikation mbH
> Am Coloneum 9 | 50829 Köln
> Tel: 0221 2222-8711 | Fax: 0221 2222-78711
> www.netcologne.de
>
> Geschäftsführer:
> Dr. Hans Konle (Sprecher)
> Dipl.-Ing. Karl-Heinz Zankel
> HRB 25580, AG Köln
>
>
>
> Diese Nachricht (inklusive aller Anhänge) ist vertraulich. Sollten Sie
> diese
> Nachricht versehentlich erhalten haben, bitten wir, den Absender (durch
> Antwort-E-Mail) hiervon unverzüglich zu informieren und die Nachricht zu
> löschen. Die E-Mail darf in diesem Fall weder vervielfältigt noch in
> anderer
> Weise verwendet werden.
>



-- 
Alex
acama...@gmail.com
"Por que, no mundo, os maus, tão frequentemente, sobrepujam os bons em
influência?
-Pela fraqueza dos bons; Os maus são intrigantes e audaciosos, os bons são
tímidos. Quando estes o quiserem, dominarão." -- Livro dos Espíritos, Q932.
http://livrodosespiritos.wordpress.com/

Reply via email to