質問に特定のものがあるのかどうか不明ですが、Linuxシェルコマンドを実行するPostgres関数を作成する際に問題があります。トリガーは挿入後、私はいくつかのNEW
列を使用する必要があります。PostgreSQL関数で引数を指定してシステムコマンドを実行しています
MySQLでは、プラグインを使用すると、「MySQLのUDFは、」それはかなり簡単だった、トリガーはこのように働いている間:
BEGIN
DECLARE result int(10);
SET result = sys_exec('/usr/bin/php /var/www/html/.../regras.php NEW.uniqueid NEW.linkedid NEW.eventtype');
END
しかし、PostgreSQLの上で、私は言語PL/SHを試してみました、ウィッヒは、任意のシェルスクリプトを実行できます私は次の関数を書いた:それは適切な方法での.phpファイルを実行し
CREATE FUNCTION tarifador_func2() RETURNS TRIGGER
LANGUAGE plsh
AS $$
#!/bin/sh
/usr/bin/php /var/www/html/...regras.php NEW.uniqueid NEW.linkedid NEW.eventtype
$$;
を、問題は言語がそうargs[]
で、私はPHPの引数として与えているNEW
変数を認識しないです私が得たものはです,"NEW.linkedid"
および"NEW.eventtype"
である。
したがって、PL/shでNEW
引数を正しく使用するにはどうすればよいですか? もう1つの可能な解決方法は、トリガーを作成する際に引数を使用して必要な3つの値を手動で設定することですが、引数にNEW
を使用することはできません。
'DELETE'は' OLD'レコードもパラメータとして報告しなければなりません。 (なぜなら、すべてのトリガーイベントでは、['tg_trigtuple'プロパティ](https://www.postgresql。)を使用しています(https://github.com/petere/plsh/blob/a5b310ff397f8178292762b8a353d315efd67644/plsh.c#L458)。 org/docs/current/static/trigger-interface.html))。 - トリガー定義にもパラメータが固定されている場合は、列値の前に来ることになります(これらは非常に文書化されていないようです)。 – pozs