From: | "Merlin Moncure" <mmoncure(at)gmail(dot)com> |
---|---|
To: | "Martin Pihlak" <martin(dot)pihlak(at)gmail(dot)com> |
Cc: | "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>, "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com>, "Pg Hackers" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: plan invalidation vs stored procedures |
Date: | 2008-08-05 20:09:45 |
Message-ID: | b42b73150808051309y20a445e9r3b18879bc9248a97@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Aug 5, 2008 at 10:12 AM, Martin Pihlak <martin(dot)pihlak(at)gmail(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | korry | 2008-08-05 20:41:42 | Re: Parsing of pg_hba.conf and authenticationinconsistencies |
Previous Message | Simon Riggs | 2008-08-05 20:07:00 | Re: Parsing of pg_hba.conf and authentication inconsistencies |