Giải pháp này đã được thử nghiệm và đang hoạt động trong Postgres 9.1
Tôi đã sử dụng trình kích hoạt để giải quyết vấn đề.
Đây là mã đầy đủ để bạn có thể dán vào postgres và tự mình thử và giải thích về cách hoạt động bên dưới
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'
Tạo bảng demo của chúng tôi:
CREATE TABLE foobar (
foo text,
bar int
);
Tạo hàm chuyển đổi (foo) thành chữ thường:
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;
Tạo một trình kích hoạt thực thi mã thành chữ thường trước khi chèn:
CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();
Và bây giờ để kiểm tra công việc của chúng tôi:
INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);
SELECT * FROM foobar;
Kết quả là hàng duy nhất trong cột foo hiện được đặt thành 'tôi viết thường'