From: | Patrick Krecker <patrick(at)judicata(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Getting "cache lookup failed for aggregate" error |
Date: | 2014-06-25 00:59:41 |
Message-ID: | CAK2mJFPeHQgbVv_nQvU8grWHWVFU5tO744RywqUC_=f_M6q6MA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Tue, Jun 24, 2014 at 4:25 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> Patrick Krecker <patrick(at)judicata(dot)com> writes:
> > Hello everyone -- We received a strange error today on our production
> write
> > master. During a routine maintenance script, we got the following error:
>
> > "ERROR: cache lookup failed for aggregate 5953992"
>
> > I think I found the culprit. We have a cron script that (among other
> > things) recreates the aggregate function array_cat_aggregate()once every
> > minute.
>
> Um. Why's it do that?
>
Well, it's admittedly a hack. The cron script uses the function just after
creating it. It was an easy way of guaranteeing that the database will have
the function when it's necessary. However, I suppose that assumption is
wrong because you have confirmed that aggregate functions are not part of
the snapshot provided by beginning a transaction.
>
> > My guess is that a) transactions do not guarantee a snapshot of
> > custom functions and b) we got unlucky and the aggregate was deleted
> during
> > the execution of the UPDATE.
>
> Yeah, there's no guarantee that dropping the aggregate wouldn't leave a
> window for this type of failure.
>
> 9.4 might be a little better about this because it doesn't use SnapshotNow
> for catalog fetches anymore, but I think you'd still be at some risk.
>
> > Here is the query that produced the error:
>
> It'd be more interesting to see what the cron script was doing to the
> aggregate definition.
>
FWIW the SQL is
DROP AGGREGATE IF EXISTS array_cat_aggregate(anyarray);
CREATE AGGREGATE array_cat_aggregate(anyarray) (
SFUNC = array_cat,
STYPE = anyarray,
INITCOND = '{}'
);
Followed by the other statement given in my previous email. But, I think
you've thoroughly answered by question. Thanks!
>
> regards, tom lane
>
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2014-06-25 01:34:33 | Re: Can't start postgresql server |
Previous Message | Adrian Klaver | 2014-06-24 23:57:16 | Re: Re: Error When Trying to Use Npgsql to COPY into a PostgreSQL Database |