Thread: Error in 8.0 rc5 with repeat calls to array operator

Error in 8.0 rc5 with repeat calls to array operator

From
Josh Berkus
Date:
Developers,

I'm finding an issue I thought was fixed with RC2, which is affecting my
ability to use arrays in RC5:

Summary:  Fast repeated calls to INT[] = INT[] operator causes error
Severity:  Query Failure
Version:  8.0.0rc5, previous builds of 8.0.0
Platform:  Gentoo Linux
Description:

The following comparison works fine normally:
template1=# select '{}'::INT[] = '{}'::INT[];
 ?column?
----------
 t
(1 row)


However, we're found that if you run thousands of empty array comparisons in a
few seconds/minutes, eventually the empty array comparison breaks, and you
get:
ERROR:  cache lookup failed for function 0

Thereafter, *any* attempt to compare arrays gets:
dm=# select '{}'::INT[] = '{}'::INT[];
ERROR:  cache lookup failed for function 0

I'm working on a repeatable test case and seeing whether vacuum and/or restart
affects this, but since we're 24 hours from wrap, I thought I should raise
this issue ASAP.

--
--Josh

Josh Berkus
Aglio Database Solutions
San Francisco

Re: Error in 8.0 rc5 with repeat calls to array operator

From
Josh Berkus
Date:
Folks,

> I'm finding an issue I thought was fixed with RC2, which is affecting my
> ability to use arrays in RC5:

Oh, this may be a bug specifically in INTARRAY; that module is installed.

--
--Josh

Josh Berkus
Aglio Database Solutions
San Francisco

Re: Error in 8.0 rc5 with repeat calls to array operator

From
Tom Lane
Date:
Josh Berkus <josh@agliodbs.com> writes:
> However, we're found that if you run thousands of empty array comparisons in a
> few seconds/minutes, eventually the empty array comparison breaks, and you
> get:
> ERROR:  cache lookup failed for function 0

I tried

while true; do echo "select '{}'::INT[] = '{}'::INT[];" ; done | psql regression >/dev/null

on a couple different platforms, with and without INTARRAY (which
isn't invoked by this query anyway, so I doubt it matters).  I haven't
seen any misbehavior yet.

If you can reproduce this, please attach to the backend with gdb, set a
breakpoint at errfinish(), and get a stack traceback from the point of
the error.

            regards, tom lane

Re: Error in 8.0 rc5 with repeat calls to array operator

From
Daniel Ceregatti
Date:
This doesn't happen on a fresh initdb. In fact, it doesn't happen even
directly after I load data. It might take a day or two, but eventually
the problem manifests itself. I can reproduce it 100% of the time now.
I've noticed this on 8rc1-5. Josh and I will get you a gdb trace ASAP.

Daniel

Tom Lane wrote:

>Josh Berkus <josh@agliodbs.com> writes:
>
>
>>However, we're found that if you run thousands of empty array comparisons in a
>>few seconds/minutes, eventually the empty array comparison breaks, and you
>>get:
>>ERROR:  cache lookup failed for function 0
>>
>>
>
>I tried
>
>while true; do echo "select '{}'::INT[] = '{}'::INT[];" ; done | psql regression >/dev/null
>
>on a couple different platforms, with and without INTARRAY (which
>isn't invoked by this query anyway, so I doubt it matters).  I haven't
>seen any misbehavior yet.
>
>If you can reproduce this, please attach to the backend with gdb, set a
>breakpoint at errfinish(), and get a stack traceback from the point of
>the error.
>
>            regards, tom lane
>
>