Re: Refreshing functional index - Mailing list pgsql-general

From Merlin Moncure
Subject Re: Refreshing functional index
Date
Msg-id CAHyXU0zPP=nyJRV4QrZ8-i2b32oAGXrq3M55Uc26u2BJS_orug@mail.gmail.com
Whole thread Raw
In response to Refreshing functional index  (Grzegorz Tańczyk <goliatus@polzone.pl>)
Responses Re: Refreshing functional index  (Grzegorz Tańczyk <goliatus@polzone.pl>)
List pgsql-general
On Wed, Aug 29, 2012 at 4:01 PM, Grzegorz Tańczyk <goliatus@polzone.pl> wrote:
> Hello,
>
> I have a problem with functional index feature in Postgres 8.3
>
> There are two tables, lets call them: PARENTS and CHILDREN(with timestamp
> column)
>
> I created functional index on parents with function, which selects max value
> of timestamp from child elements(for given parent_id).
>
> The problem is that plpgsql function, which returns the value is IMMUTABLE
> and it works like a cache.  When I insert new record to children table,
> select over parents with function gives wrong(outdated) results.
>
> So far I figured out only one way to flush this "cache". It's by calling
> REINDEX on my index. I guess I should call it after every insert to children
> table. It's not good for me since it locks the table.
>
> I'm thinking about partitioning the index by my app, so reindexing will be
> less painful, but perhaps there is some other easier way to solve tihs
> problem?

Well, the only reason what you're trying to do works at all is because
the database isn't stricter about double checking to see if your stuff
is IMMUTABLE: it isn't, so of course it doesn't work.

How about a trigger on the child table that updates an indexed column
on parent?

merlin


pgsql-general by date:

Previous
From: Grzegorz Tańczyk
Date:
Subject: Refreshing functional index
Next
From: "David Johnston"
Date:
Subject: Re: Refreshing functional index