1

1) データベースにリストされているチャンネル名を知りたいのですが、一部のクライアントがこのデータベースをリッスンしていても、pg_listening_channels() 名は常に null 値 (空白) を返します。

以下は私のpgsqlコードです。このコードには何か問題があります。

CREATE OR REPLACE FUNCTION query_trigger()
  RETURNS trigger AS
$BODY$
DECLARE
 send_message  text;
 queryString  text;
 channelNameArray text[];
 channelNames text;
      BEGIN
        queryString = current_query();
        channelNameArray = pg_listening_channels();
        channelNames = array_to_string(channelNameArray , ',');

           send_message := queryString || '  ' || channelNames;
           insert into "Client_Address" values (channelNames , queryString) ;
           PERFORM pg_notify('myChannel', send_message  );
           RETURN NULL;
          END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION query_trigger() OWNER TO postgres;

Schema of Client_Address table
Notify_node   text;
query         text;  
4

1 に答える 1

2

pg_listening_channelsレポートは自分のセッションでリッスンします。他のセッションからのリッスンをレポートしません (できません)。

Pg 9.2 でその情報をシステムから直接取得する方法はありません。いつでも情報をサイドテーブルに維持できますが、同期を維持する際に通常の問題が発生します。

とにかく、なぜこれをやりたいのですか?このように使うのはちょっと奇妙NOTIFYです。全員が同じチャンネルを聞いて、1 回の通話で全員に通知してみませんか?

監査ログを書き込もうとしていますか? その場合は、既存のソリューションのいずれかを使用するか、単に csv ログを使用することを検討してください。

于 2013-08-13T08:50:39.643 に答える