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

postgres9.4でトリガーを使用して外部プログラムを実行する

    免責事項: 同じプロジェクトでAndreasFritschと協力しています。

    この問題は次のように解決しました。

    「言語」拡張機能PostgreSQL用のPL/sh手続き型言語ハンドラー があります。 Peter Eisentrautによってコード化されており、必要なことを正確に実行します。

    次のようにシェルスクリプトを定義します:

    CREATE or REPLACE FUNCTION test(text) RETURNS text AS '
    #!/bin/bash
    echo Test: $1 is working
    ' LANGUAGE plsh;
    

    これは、トリガーに役立つ環境変数を備えたトリガー関数の例です。

    CREATE or REPLACE FUNCTION TriggerTest() RETURNS trigger AS $$
    #!/bin/bash
    #mkdir /has/triggertest/$PLSH_TG_NAME
    cd /has/triggertest
    touch PLSH_TG_NAME-$PLSH_TG_NAME
    touch PLSH_TG_WHEN-$PLSH_TG_WHEN
    touch PLSH_TG_LEVEL-$PLSH_TG_LEVEL
    touch PLSH_TG_OP-$PLSH_TG_OP
    touch PLSH_TG_TABLE_NAME-$PLSH_TG_TABLE_NAME
    touch PLSH_TG_TABLE_SCHEMA-$PLSH_TG_TABLE_SCHEMA
    touch new-$new.x
    #touch "arg-0-'$0'"
    touch "arg-1-'$1'"
    touch "arg-2-'$2'"
    touch "arg-3-'$3'"
    touch "arg-4-'$4'"
    
    for arg do
        touch "Arg is '$arg'"
    done
    
    exit 0
    $$ LANGUAGE plsh;
    

    次のSQLステートメントを使用してbefore-insert-triggerを作成します

    CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest2
        FOR EACH ROW EXECUTE PROCEDURE TriggerTest(new);
    

    これが、彼の問題に対して同様の解決策を探している他の人の助けになることを願っています。




    1. 初期化されていないコレクションPL/SQLへの参照

    2. SQLインジェクションの防止

    3. MySQL:ファイル'/tmp/#sql_3c6_0.MYI'を作成/書き込みできません(Errcode:2)-それはどういう意味ですか?

    4. Opencartカスタム管理領域->テーブルの最初のレコードのみを表示するクエリ