Обсуждение: pg_dump bug - problems along the way

Поиск
Список
Период
Сортировка

pg_dump bug - problems along the way

От
"Oliver Elphick"
Дата:
Still trying to fix the bug with inherited check constraints...

I have tried to create a min(oid) aggregate, but when I use it, I get
the message `ERROR:  fmgr_info: function 108994: cache lookup failed'.

What is the problem, please?

I created it thus:

create function oid4smaller (oid, oid) returns oid as               '/home/olly/cprogs/oidcompare.so' language 'c';

create aggregate min (basetype = oid, sfunc1 = oid4smaller,                     stype1 = oid, stype2 = oid);


The C file is compiled and linked thus (for Linux x86):
 $ gcc -o oidcompare.o -c -I/usr/include/postgresql oidcompare.c $ gcc -shared -o oidcompare.so oidcompare.o

and it says:
#include <postgresql/postgres.h>

Oid oid4smaller(Oid o1, Oid o2) {       return (o1 < o2 ? o1 : o2);
}

Oid oid4larger(Oid o1, Oid o2) {       return (o1 > o2 ? o1 : o2);
}



-- 
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver              PGP key from public servers; key
ID32B8FAA1                ========================================    "If my people, which are called by my name, shall
    humble themselves, and pray, and seek my face, and      turn from their wicked ways; then will I hear from
heaven,and will forgive their sin, and will heal      their land."               II Chronicles 7:14 
 




Re: [HACKERS] pg_dump bug - problems along the way

От
Sferacarta Software
Дата:
Hello Oliver,

sabato, 21 novembre 98, you wrote:

OE> Still trying to fix the bug with inherited check constraints...

OE> I have tried to create a min(oid) aggregate, but when I use it, I get
OE> the message `ERROR:  fmgr_info: function 108994: cache lookup failed'.

OE> What is the problem, please?

OE> I created it thus:

OE> create function oid4smaller (oid, oid) returns oid as
OE>                 '/home/olly/cprogs/oidcompare.so' language 'c';

OE> create aggregate min (basetype = oid, sfunc1 = oid4smaller,
OE>                       stype1 = oid, stype2 = oid);

Try this...it works...

create function oid4smaller (oid, oid) returns oid as
'
begin    if $1 > $2 then       return $2;    else       return $1;    end if;end;
' language 'plpgsql';

create aggregate m (basetype = oid, sfunc1 = oid4smaller,                     stype1 = oid, stype2 = oid);

prova=> select oid from a;  oid
------
376064
376065
380064
380065
380066
380067
(6 rows)

prova=> select min(oid) from a;  min
------
376064
(1 row)


-Jose'-




Re: [HACKERS] pg_dump bug - problems along the way

От
"Oliver Elphick"
Дата:
Sferacarta Software wrote: >Try this...it works... > >create function oid4smaller (oid, oid) returns oid as >' >begin >
   if $1 > $2 then >        return $2; >     else >        return $1; >     end if; > end; >' language 'plpgsql';
 

I'm afraid it doesn't work for me; clearly the problem is elsewhere:
bray=> select min(oid) from europe;
ERROR:  fmgr_info: function 108994: cache lookup failed

**Idea** - try in another database -- it works, so it must be a database
corruption of some kind.

Thanks for your help.

-- 
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver              PGP key from public servers; key
ID32B8FAA1                ========================================    "The LORD is nigh unto all them that call upon
him,to     all that call upon him in truth."                                          Psalms 145:18
 




Re: [HACKERS] pg_dump bug - problems along the way

От
jwieck@debis.com (Jan Wieck)
Дата:
>
> Sferacarta Software wrote:
>   >Try this...it works...
>   >
>   >create function oid4smaller (oid, oid) returns oid as
>   >'
>   >begin
>   >     if $1 > $2 then
>   >        return $2;
>   >     else
>   >        return $1;
>   >     end if;
>   > end;
>   >' language 'plpgsql';
>
> I'm afraid it doesn't work for me; clearly the problem is elsewhere:
>
> bray=> select min(oid) from europe;
> ERROR:  fmgr_info: function 108994: cache lookup failed
>
> **Idea** - try in another database -- it works, so it must be a database
> corruption of some kind.

    Looks like you dropped and recreated the function used in the
    min(oid)  aggregate  without  dropping  and  recreating   the
    aggregate itself.

    Note  that  the functions used in an aggregate are referenced
    by OID, not by name.  In pg_aggregate the pg_proc tuple  with
    the  old  OID  is still referenced and cannot be found (cache
    lookup failed). Drop the agg and recreate it.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#======================================== jwieck@debis.com (Jan Wieck) #