Re: plan invalidation vs stored procedures - Mailing list pgsql-hackers

From Merlin Moncure
Subject Re: plan invalidation vs stored procedures
Date
Msg-id b42b73150808051309y20a445e9r3b18879bc9248a97@mail.gmail.com
Whole thread Raw
In response to Re: plan invalidation vs stored procedures  (Martin Pihlak <martin.pihlak@gmail.com>)
Responses Re: plan invalidation vs stored procedures  ("Marko Kreen" <markokr@gmail.com>)
List pgsql-hackers
On Tue, Aug 5, 2008 at 10:12 AM, Martin Pihlak <martin.pihlak@gmail.com> wrote:
>>> DROP FUNCTION
>>> create function foo() returns integer as $$ begin return 2; end; $$ language plpgsql;
>>> CREATE FUNCTION
>>> execute c1;
>>> psql:test.sql:11: ERROR:  cache lookup failed for function 36555
>>
>> This is simply a bad, wrong, stupid way to do it.  Why do you not use
>> CREATE OR REPLACE FUNCTION?
>>
>
> Well, the test case was an illustration. The actual reason for DROP and CREATE is
> the inability to change function return type. In our case there are plpgsql OUT
> parameters involved, and there is no other way to add additional OUT parameters
> without dropping the function first. I'd be glad if this was fixed, but I still
> think that proper plan invalidation for function changes is needed (inlined
> functions, ALTER FUNCTION stuff etc.)

one workaround is to use a table based custom composite type:

create table foo_output(a int, b text);

create function foo() returns foo_output as ...

alter table foo_output add column c int;

create or replace foo() if necessary.  This also works for 'in' variables.

voila! :-)  note you can't use standard composite type because there
is no way to 'alter' it.

merlin


pgsql-hackers by date:

Previous
From: Simon Riggs
Date:
Subject: Re: Parsing of pg_hba.conf and authentication inconsistencies
Next
From: "korry"
Date:
Subject: Re: Parsing of pg_hba.conf and authenticationinconsistencies