私はdb内にいくつかの関数を持っています。postgresql case inside functionはトリガーしません
特定のテーブルのデータが5分より古い場合、1つの関数を実行する必要があります。私はそれをやってみました
:私は、通常のSELECTクエリなどのコマンドを実行すると
PERFORM case when now() - '5 minutes'::interval > (select end_time from x order by end_route desc limit 1) then update_x() else null end;
、それがOKに実行されます。しかし、別の関数(呼び出されているものが5分以上経過していない更新されたテーブルを返します)の中に入れても、決して実行されません。また、私はちょうどupdate_x()を置く場合、それはOK(ただし、関数が呼び出されるたびに)実行されます。
誰も私がこれをどのように修正できるか考えている人はいますか? 1つのアイデアは、関数を独立して5分ごとに実行するようにcronを設定することですが、この機能はかなりリソース集約的なので、サーバーはアイドル状態です。
私はバージョン8.4になっています(私のISPのため、変更することはできませんが、VPSに移行することを検討していますので、これが9.5以降で動作するものであれば待つことができます)。
もう少しコンテキストなしで言うのは難しいが、注目すべき一つのことは、 'NOW()'実際には、むしろ現在の時刻を返しますが、しないことです現在のトランザクションの開始時刻。これがあなたが望むものでない場合は、代わりに 'clock_timestamp()'を試してください。詳細については、[docs](https://www.postgresql.org/docs/current/static/functions-datetime.html)を参照してください。 –