Deze oplossing is getest en werkt in Postgres 9.1
Ik gebruikte triggers om problemen op te lossen.
Hier is de volledige code zodat je deze in postgres kunt plakken en het zelf kunt uitproberen en uitleg over hoe het werkt hieronder
DROP TABLE foobar;
CREATE TABLE foobar (
foo text,
bar int
);
CREATE OR REPLACE FUNCTION lowecase_foo_on_insert() RETURNS trigger AS $lowecase_foo_on_insert$
BEGIN
NEW.foo = LOWER(NEW.foo);
RETURN NEW;
END;
$lowecase_foo_on_insert$ LANGUAGE plpgsql;
CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();
INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);
SELECT * FROM foobar; //result 'lowercase me'
Maak onze demotabel:
CREATE TABLE foobar (
foo text,
bar int
);
Functie maken die (foo) naar kleine letters converteert:
CREATE OR REPLACE FUNCTION lowecase_foo_on_insert() RETURNS trigger AS $lowecase_foo_on_insert$
BEGIN
NEW.foo = LOWER(NEW.foo);
RETURN NEW;
END;
$lowecase_foo_on_insert$ LANGUAGE plpgsql;
Maak een trigger die code uitvoert in kleine letters foo voordat deze wordt ingevoegd:
CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();
En nu ons werk testen:
INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);
SELECT * FROM foobar;
Het resultaat is dat de enige rij in kolom foo nu is ingesteld op 'kleine letter mij'