sql >> データベース >  >> RDS >> PostgreSQL

Postgresルールまたはトリガーを作成して、挿入時に列を小文字または大文字に自動的に変換します

    このソリューションはテスト済みで、Postgres9.1で機能しています

    問題を解決するためにトリガーを使用しました。

    これが完全なコードなので、postgresに貼り付けて自分で試してみて、以下でどのように機能するかを説明します

    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'
    

    デモテーブルを作成します:

    CREATE TABLE foobar (
        foo text,
        bar int
    );
    

    (foo)を小文字に変換する関数を作成します:

    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;
    

    挿入する前にfooを小文字にするコードを実行するトリガーを作成します:

    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;
    

    その結果、列fooの唯一の行が「小文字の私」に設定されるようになりました



    1. 高可用性のためのMariaDBレプリケーションのデプロイ

    2. コマンドプロンプトを使用してmysqlデータベースをエクスポートする方法は?

    3. RubyDatamapper.countは常に0を返します

    4. 非常に大きなMySQLテーブルでINSERTパフォーマンスを向上させる方法