Re: Calling function from VFP changes character field to Memo

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Frank Cazabon <frank(dot)cazabon(at)gmail(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Calling function from VFP changes character field to Memo
Date: 2022-11-15 18:44:03
Message-ID: 1177304.1668537843@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Frank Cazabon <frank(dot)cazabon(at)gmail(dot)com> writes:
> If however I have a function defined like this

> CREATE OR REPLACE FUNCTION public.testfunction(
>     )
>     RETURNS TABLE
>     (
>         Firstname character(30)
>     )
>     LANGUAGE 'plpgsql'
> AS $BODY$
> BEGIN
>     RETURN QUERY SELECT p.cFirstName FROM patients p;
> END;
> $BODY$;

> And I call:
> SELECT * FROM public.testFunction();
> Then FirstName returns as a Memo field (similar to a Text field).

This is mostly about whatever software stack you're using on the
client side --- Memo is certainly not something Postgres knows about.

> Any idea what I need to do to get it to return the character(30) type?

There's no chance of getting back the "30" part with this structure,
because function signatures do not carry length restrictions.
What I expect is happening is that you get firstname as an
unspecified-length "character" type, and something on the client
side is deciding to cope with that by calling it "Memo" instead.

You could perhaps work around that by defining a named composite
type:

create type testfunction_result as (firstname character(30), ...);

create function testfunction() returns setof testfunction_result as ...

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2022-11-15 18:48:32 Re: Calling function from VFP changes character field to Memo
Previous Message Adrian Klaver 2022-11-15 18:26:53 Re: Calling function from VFP changes character field to Memo