Thread: Trigger to force fields to lowercase at insert/update

Trigger to force fields to lowercase at insert/update

From
Leonardo Boiko
Date:
Suppose I have a bunch of fields in different tables which I'd like to
always force to lowercase (since they represent case-insensitive data).
Suppose I want to do it at SQL level, not application level.  If the
user say "INSERT INTO foo VALUES ('Abc')", I want to really insert
'abc'.  Is there an elegant way of doing this? Some kind of trigger,
maybe? I have no experience with triggers or pl/sql, but I couldn't
come up with a solution general enough to be reused in multiple places.
Or is the premise a bad idea?


--
Leonardo Boiko
http://namakajiri.net

Attachment

Re: Trigger to force fields to lowercase at insert/update

From
Andreas Kretschmer
Date:
Leonardo Boiko <leoboiko@gmail.com> schrieb:

> Suppose I have a bunch of fields in different tables which I'd like to
> always force to lowercase (since they represent case-insensitive data).
> Suppose I want to do it at SQL level, not application level.  If the
> user say "INSERT INTO foo VALUES ('Abc')", I want to really insert

insert into foo values (lower('Abc')); ?

> 'abc'.  Is there an elegant way of doing this? Some kind of trigger,
> maybe? I have no experience with triggers or pl/sql, but I couldn't

test=# create table foo (x text);
CREATE TABLE
test=# create function foo_lower() returns trigger as $$begin NEW.x := lower(NEW.x); return NEW; end;$$ language
plpgsql;
CREATE FUNCTION
test=# create trigger t_foo before insert or update on foo for each row execute procedure foo_lower();
CREATE TRIGGER
test=# insert into foo (x) values ('AbC');
INSERT 0 1
test=# select * from foo;
  x
-----
 abc
(1 row)



HTH, Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.                              (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."    (unknow)
Kaufbach, Saxony, Germany, Europe.              N 51.05082°, E 13.56889°

Re: Trigger to force fields to lowercase at insert/update

From
Bruno Wolff III
Date:
On Wed, Apr 26, 2006 at 12:52:55 -0700,
  Leonardo Boiko <leoboiko@gmail.com> wrote:
> Suppose I have a bunch of fields in different tables which I'd like to
> always force to lowercase (since they represent case-insensitive data).
> Suppose I want to do it at SQL level, not application level.  If the
> user say "INSERT INTO foo VALUES ('Abc')", I want to really insert
> 'abc'.  Is there an elegant way of doing this? Some kind of trigger,
> maybe? I have no experience with triggers or pl/sql, but I couldn't
> come up with a solution general enough to be reused in multiple places.
> Or is the premise a bad idea?

You can use a before trigger to change the value of the column when it
is inserted or updated.