Adrian Klaver <adrian.klaver@xxxxxxxxxxx> writes: > On 7/5/19 1:49 PM, PegoraroF10 wrote: >> Sorry, the example I was thinking was this one, which works on Firebird, >> using its way of writing, obviously. >> create function myproc(id integer) returns I32 language sql as 'select $1'; >> >> On postgres ERROR: return type mismatch in function declared to return i32 >> What I mean is that Firebird sees I32 and integer as the same, Postgres >> doesn´t. > Yeah, but if you reverse the casting you did in your first example it works: > create function myproc(id integer) returns I32 language sql as 'select > $1::i32'; > CREATE FUNCTION Yeah. This isn't an inherent property of Postgres, it's just that SQL-language functions aren't defined to provide any implicit casting of their results. The given expression must yield exactly the declared function result type. Most other places in PG are laxer and will automatically perform implicit (and maybe assignment) casts for you. I don't remember offhand whether there are good reasons for SQL functions to be picky about this or it's just a shortage of round tuits. I have a vague feeling that there might be some compatibility issues in there, though. regards, tom lane