issues with dropped columns in plpgsql code again

Started by Pavel Stehuleover 12 years ago5 messages
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

One user reported a issues with triggers related to dropped columns.

When I checked his code, I found a more possible problems.

He use a trigger in form

$$
DECLARE somevar targettable;
BEGIN
somevar := NEW;
// do some with somevar;
RETURN somevar;
END;
$$

When I dropped column (I dropped numeric column) I had to finish session,
because I got a error in assign

LOCATION: exec_stmt_raise, pl_exec.c:2985
ERROR: 22P02: invalid input syntax for type numeric: "aaa"
CONTEXT: PL/pgSQL function f1_trg() line 4 at assignment
LOCATION: set_var_from_str, numeric.c:3253

Regards

Pavel

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#1)
Re: issues with dropped columns in plpgsql code again

sorry

my test

create table f1(a int, b int, c varchar, dropped_column numeric, d varchar);

create or replace function f1_trg()
returns trigger as $$
declare _f1_var f1;
begin raise notice 'run trigger';
_f1_var := new;
return _f1_var;
end;
$$ language plpgsql;

create trigger xx before insert on f1 for row execute procedure f1_trg();

insert into f1 values(1,1,'aaa',1.1,'aaa');
alter table f1 drop column dropped_column ;

insert into f1 values(1,1,'aaa','aaa');

2013/5/7 Pavel Stehule <pavel.stehule@gmail.com>

Show quoted text

Hello

One user reported a issues with triggers related to dropped columns.

When I checked his code, I found a more possible problems.

He use a trigger in form

$$
DECLARE somevar targettable;
BEGIN
somevar := NEW;
// do some with somevar;
RETURN somevar;
END;
$$

When I dropped column (I dropped numeric column) I had to finish session,
because I got a error in assign

LOCATION: exec_stmt_raise, pl_exec.c:2985
ERROR: 22P02: invalid input syntax for type numeric: "aaa"
CONTEXT: PL/pgSQL function f1_trg() line 4 at assignment
LOCATION: set_var_from_str, numeric.c:3253

Regards

Pavel

#3Szymon Guz
mabewlun@gmail.com
In reply to: Pavel Stehule (#2)
Re: issues with dropped columns in plpgsql code again

On 7 May 2013 21:23, Pavel Stehule <pavel.stehule@gmail.com> wrote:

sorry

my test

create table f1(a int, b int, c varchar, dropped_column numeric, d
varchar);

create or replace function f1_trg()
returns trigger as $$
declare _f1_var f1;
begin raise notice 'run trigger';
_f1_var := new;
return _f1_var;
end;
$$ language plpgsql;

create trigger xx before insert on f1 for row execute procedure f1_trg();

insert into f1 values(1,1,'aaa',1.1,'aaa');
alter table f1 drop column dropped_column ;

insert into f1 values(1,1,'aaa','aaa');

Fails for me as well. I managed to run the last query either with
restarting session, or disabling the trigger.

Checked that on PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2, 64-bit

regards,
Szymon

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#1)
Re: issues with dropped columns in plpgsql code again

Pavel Stehule <pavel.stehule@gmail.com> writes:

One user reported a issues with triggers related to dropped columns.
When I checked his code, I found a more possible problems.

This is just the same kind of modified-rowtype problem we've discussed
before.

I continue to maintain that the only realistic fix is to stop using the
PLPGSQL_DTYPE_ROW infrastructure for variables of externally-defined
composite types. In the last go-round, this was rejected on the
(unproven) assumption that it would make things slower. But as a wise
man once said, you can make code arbitrarily fast if it doesn't have to
give the right answer.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#4)
Re: issues with dropped columns in plpgsql code again

Dne 10.5.2013 22:17 "Tom Lane" <tgl@sss.pgh.pa.us> napsal(a):

Pavel Stehule <pavel.stehule@gmail.com> writes:

One user reported a issues with triggers related to dropped columns.
When I checked his code, I found a more possible problems.

This is just the same kind of modified-rowtype problem we've discussed
before.

Yes. It is same problém.

I continue to maintain that the only realistic fix is to stop using the
PLPGSQL_DTYPE_ROW infrastructure for variables of externally-defined
composite types. In the last go-round, this was rejected on the
(unproven) assumption that it would make things slower. But as a wise
man once said, you can make code arbitrarily fast if it doesn't have to
give the right answer.

Yes. It is probably solutions.

Regards

Pavel

Show quoted text

regards, tom lane