私はログテーブルを持って、私はクライアントに戻ってストリーミングしたいいくつかのデータで、唯一の追加。効率的な方法はありますか?
は、ポーリングなしのみPGを使用して、そこからデータをストリームする方法は存在し?
だから私は得ることができます:
1. Inv.Add 1, T=10
.. some seconds after, the server push?
2. Inv.Add 2, T=15
私はログテーブルを持って、私はクライアントに戻ってストリーミングしたいいくつかのデータで、唯一の追加。効率的な方法はありますか?
は、ポーリングなしのみPGを使用して、そこからデータをストリームする方法は存在し?
だから私は得ることができます:
1. Inv.Add 1, T=10
.. some seconds after, the server push?
2. Inv.Add 2, T=15
そのチャンネルにあなたのクライアントlisten
を持って、その後NOTIFY
を呼び出し、トリガーを追加します。
ここでは、ListenとNotifyでいくつかの巨大な警告がありますが、あなたがしたいことを正確に行うためにそこにあります。たとえば、通知を送信することができますので、何のためのペイロードに依存していない人には何のセキュリティ権限のチェックはありません。
私のアプローチは次のようになります。
もう一度notifyで行データを送信できますが、誰かがデータベースに接続して危険な状態になった場合、誰でもアプリケーション行データを送信できます。
PostgreSQLは任意の操作を開始するためのいずれかの方法がありません。すべてのアクティビティは、外部イベントによってトリガされる必要があります。
あなたが挿入された行の値から出力をフォーマットするために、テーブルの上にplperluトリガを追加し、指定されたログファイルに追加することができました。
CREATE OR REPLACE FUNCTION tf_log_to_file() RETURNS trigger AS
$BODY$
use strict;
use Time::HiRes qw(time);
use POSIX qw(strftime);
my $t = time;
my $date = strftime "%Y%m%d %H:%M:%S", localtime $t;
$date .= sprintf ".%03d", ($t-int($t))*1000;
my $contents = $date . ' Inv.Add ' . $_TD->{new}{yourcolname};
my $file = "/var/log/mylog.log";
open(my $out, '>>', $file) or die "Unable to open or create file $file: $!";
print $out decode_bytea($contents);
close($out);
$BODY$ LANGUAGE plperlu VOLATILE SECURITY DEFINER;
CREATE TRIGGER t_log_to_file AFTER INSERT ON yourtable
FOR EACH ROW EXECUTE PROCEDURE tf_log_to_file();