Обсуждение: locale operation to be invoked, but no collation was derived (in trigger)
Hi,
first i am not sure how the state of the collation work in current git is supposed to be with all the discussion going
onhere... but wanted to get out that bug report:
create table ad_tab (ad_tab_id varchar(32), name varchar(32));
create function test_trg() RETURNS TRIGGER LANGUAGE plpgsql AS $function$ DECLAREBEGIN --Check tab name starts with a
uppercase letter IF (not (substr(new.Name,1,1) between 'A' and 'Z')) THEN RAISE EXCEPTION '%',
'@TabName1stCharUpper@'; --OBTG:-20000-- END IF;END
; $function$
;
create trigger test_trg after update on test for each row execute procedure test_trg();
insert into test values ('1', 'test');
update test set name = 'test2' where test_id = '1';
ERROR: locale operation to be invoked, but no collation was derived
CONTEXT: PL/pgSQL function "test_trg" line 4 at IF
Regards,
Stefan
Stefan Huehner <stefan@huehner.org> writes:
> first i am not sure how the state of the collation work in current git is supposed to be with all the discussion
goingon here... but wanted to get out that bug report:
I think the current state is "plpgsql is about completely broken for
collation operations" :-(. But thanks for the test case.
regards, tom lane
Stefan Huehner <stefan@huehner.org> writes:
> first i am not sure how the state of the collation work in current git is supposed to be with all the discussion
goingon here... but wanted to get out that bug report:
> create table ad_tab (ad_tab_id varchar(32), name varchar(32));
> create function test_trg() RETURNS TRIGGER LANGUAGE plpgsql AS $function$ DECLARE
> BEGIN
> --Check tab name starts with a upper case letter
> IF (not (substr(new.Name,1,1) between 'A' and 'Z')) THEN
> RAISE EXCEPTION '%', '@TabName1stCharUpper@' ; --OBTG:-20000--
> END IF;
> END
> ; $function$
> ;
> create trigger test_trg after update on test for each row execute procedure test_trg();
> insert into test values ('1', 'test');
> update test set name = 'test2' where test_id = '1';
> ERROR: locale operation to be invoked, but no collation was derived
> CONTEXT: PL/pgSQL function "test_trg" line 4 at IF
Fixed, thanks for the test case. (I have a feeling I'd better grep the
whole backend for other places that are likewise neglecting to set the
collation fields in manually-created expression nodes ...)
regards, tom lane