Re: cast needed - but where and why?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Steve Clark <sclark(at)netwolves(dot)com>
Cc: pgsql <pgsql-general(at)postgresql(dot)org>
Subject: Re: cast needed - but where and why?
Date: 2009-04-02 15:52:09
Message-ID: 25196.1238687529@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Steve Clark <sclark(at)netwolves(dot)com> writes:
> I am getting the following error after upgrading from 7.4.6 to 8.3.6
> and can't figure out what is wrong. Any help would be greatly appreciated.
> 2009-04-02 10:45:10 EDT:srm2api:ERROR: column "event_ref_log_no" is of type integer but expression is of type text at character 146

I don't know ecpg very well, but if it doesn't provide any information
about parameter datatypes then the backend would resolve this:

case when $7 > 0 then $8 else null end

as producing a result of type "text". 7.4 would have allowed that to be
cast to int silently, but 8.3 won't (and the runtime cast involved
would've been expensive anyway). I suggest sticking a cast directly
on the ambiguous parameter, ie

> case when :h_event_ref_log_no > 0
> then :h_event_ref_log_no :: integer
> else null end,

(You needn't cast the null, since the type attached to the other case
arm is a sufficient cue.)

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Sam Mason 2009-04-02 15:57:33 Re: Help with C-Function on Postgre
Previous Message linnewbie 2009-04-02 15:42:02 Re: Posgres Adding braces at beginning and end of text (html) content