fmgr_info: function 0: cache lookup failed

Started by Booth, Robertabout 24 years ago4 messagesgeneral
Jump to latest
#1Booth, Robert
Robert_Booth@intuit.com

I'm porting an Access database to Postgres but keeping Access as the client.
I have been having problems with checkboxes and so I did some searching and
came across information that told me to uncheck Bools as Char in the ODBC
driver settings, I did that and started getting the following error:

ERROR: Unable to identify an operator '=' for types 'boolean' and 'integer'
You will have to retype this query using an explicit cast

So after some more searching I came across a message talking about adding
the function and an operator below to handle this problem:

CREATE FUNCTION MsAccessBool (bool, int4) RETURNS BOOL AS '
BEGIN
IF $1 IS NULL THEN
RETURN NULL;
END IF;

IF $1 IS TRUE THEN
IF $2 <> 0 THEN
RETURN TRUE;
END IF;
ELSE
IF $2 = 0 THEN
RETURN TRUE;
END IF
END IF;

RETURN FALSE;
END ;
' LANGUAGE 'plpgsql';

CREATE OPERATOR = (
LEFTARG = BOOL,
RIGHTARG = INT4,
PROCEDURE = MsAccessBool,
COMMUTATOR = '=',
NEGATOR = '<>',
RESTRICT = EQSEL,
JOIN = EQJOINSEL);

So I did this, and now I'm getting the "fmgr_info: function 0: cache lookup
failed" message. I've again done some looking and the only thing I've found
is a message that talks about the oprrest and oprjoin fields in the
pg_operator table, but not what I need to do with them. Any help would be
greatly appreciated.

Thanks,
Rob

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Booth, Robert (#1)
Re: fmgr_info: function 0: cache lookup failed

"Booth, Robert" <Robert_Booth@intuit.com> writes:

CREATE FUNCTION MsAccessBool (bool, int4) RETURNS BOOL AS ...

CREATE OPERATOR = (
LEFTARG = BOOL,
RIGHTARG = INT4,
PROCEDURE = MsAccessBool,
COMMUTATOR = '=',
NEGATOR = '<>',
RESTRICT = EQSEL,
JOIN = EQJOINSEL);

So I did this, and now I'm getting the "fmgr_info: function 0: cache lookup
failed" message.

You are telling the system that there will be an int4 = bool operator
(the commutator) as well as a bool <> int4 operator (the negator).
If you are not going to supply same, don't declare that you will.

The error message could be more helpful, perhaps :-(

regards, tom lane

#3Juliano Ignacio
jsignacio@yahoo.com
In reply to: Booth, Robert (#1)
Re: fmgr_info: function 0: cache lookup failed
--- "Booth, Robert" <Robert_Booth@intuit.com> wrote:

I'm porting an Access database to Postgres but
keeping Access as the client....
...So I did this, and now I'm getting the

"fmgr_info:

function 0: cache lookup
failed" message. ...Any help would be
greatly appreciated.

Thanks,
Rob

Your problem, as I see, could be fixed following the
instructions bellow:

http://techdocs.postgresql.org/errors.php#plpgsqlinit_fcache

Juliano S. Ignacio
jsignacio@yahoo.com

__________________________________________________
Do You Yahoo!?
Try FREE Yahoo! Mail - the world's greatest free email!
http://mail.yahoo.com/

#4Booth, Robert
Robert_Booth@intuit.com
In reply to: Juliano Ignacio (#3)
Re: fmgr_info: function 0: cache lookup failed

"Booth, Robert" <Robert_Booth@intuit.com> writes:

CREATE FUNCTION MsAccessBool (bool, int4) RETURNS BOOL AS ...

CREATE OPERATOR = (
LEFTARG = BOOL,
RIGHTARG = INT4,
PROCEDURE = MsAccessBool,
COMMUTATOR = '=',
NEGATOR = '<>',
RESTRICT = EQSEL,
JOIN = EQJOINSEL);

So I did this, and now I'm getting the "fmgr_info: function 0: cache

lookup

failed" message.

You are telling the system that there will be an int4 = bool operator
(the commutator) as well as a bool <> int4 operator (the negator).
If you are not going to supply same, don't declare that you will.

The error message could be more helpful, perhaps :-(

regards, tom lane

So are you telling me that I need to create another OPERATOR?

And if so would this be the correct syntax?

CREATE OPERATOR <> (
LEFTARG = BOOL,
RIGHTARG = INT4,
PROCEDURE = MsAccessBool,
COMMUTATOR = '=',
NEGATOR = '<>',
RESTRICT = EQSEL,
JOIN = EQJOINSEL);

Rob