PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie eine Postgres-Regel oder einen Trigger, um eine Spalte beim Einfügen automatisch in Klein- oder Großbuchstaben umzuwandeln

Diese Lösung wurde getestet und funktioniert in Postgres 9.1

Ich habe Trigger verwendet, um das Problem zu lösen.

Hier ist der vollständige Code, damit Sie ihn in Postgres einfügen und selbst ausprobieren können, und unten wird erklärt, wie er funktioniert

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'

Erstellen Sie unseren Demotisch:

CREATE TABLE foobar (
    foo text,
    bar int
);

Erstellen Sie eine Funktion, die (foo) in Kleinbuchstaben umwandelt:

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;

Erstellen Sie einen Trigger, der Code vor dem Einfügen in Kleinbuchstaben foo ausführt:

CREATE TRIGGER lowecase_foo_on_insert_trigger BEFORE INSERT OR UPDATE ON foobar
    FOR EACH ROW EXECUTE PROCEDURE lowecase_foo_on_insert();

Und nun zum Testen unserer Arbeit:

INSERT INTO foobar (foo, bar) VALUES ('LOWERCASE ME', 1);
SELECT * FROM foobar;

Das Ergebnis ist, dass die einzige Zeile in der Spalte foo jetzt auf „Kleinbuchstaben“ gesetzt ist