From: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
---|---|
To: | Andreas Kretschmer <akretschmer(at)spamfence(dot)net> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: easy function or trigger to UPPER() all alpha data |
Date: | 2012-02-13 17:36:24 |
Message-ID: | CAHyXU0wja8Y-N29FTDL7qbu54Y5hYwtAmVHdp2O5EiEO3MYMeQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Wed, Feb 8, 2012 at 10:51 AM, Andreas Kretschmer
<akretschmer(at)spamfence(dot)net> wrote:
> mgould(at)isstrucksoftware(dot)net <mgould(at)isstrucksoftware(dot)net> wrote:
>
>> We need to ensure that our data is in upper case only in the db. Is there a
>> easy way to do this via a function without having to name each column
>> separately?
>
> You can define a TRIGGER for such tasks (befor insert or update), but
> you have to name each column (maybe not within triggers written in
> pl/perl, i'm not sure ...)
you can skirt the restriction with some hstore (ab)use...
create or replace function all_upper() returns trigger as
$$
begin
new := populate_record(new, hstore(array_agg(key),
array_agg(upper(value)))) from each(hstore(new));
return new;
end;
$$ language plpgsql;
create trigger on_foo_insert before insert on foo
for each row execute procedure all_upper();
postgres=# insert into foo values (1, 'abc', 'def');
INSERT 0 1
Time: 3.388 ms
postgres=# select * from foo;
a | b | c
---+-----+-----
1 | ABC | DEF
(1 row)
of course, if some non text datatype is sensitive to case in it's
textual formatting, this might break.
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | Merlin Moncure | 2012-02-13 18:05:33 | Re: easy function or trigger to UPPER() all alpha data |
Previous Message | Wim Bertels | 2012-02-13 13:50:12 | Re: psql latex and newlines |