1

1)我想知道在我的数据库中列出的频道名称,但 pg_listening_channels() 名称总是返回空值(空白),即使某些客户端正在侦听此数据库。

下面是我的 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。为什么不让每个人都在同一个频道上收听并通过一个电话通知他们呢?

您是否正在尝试编写审计日志?如果是这样,请考虑使用现有解决方案之一或仅使用 csv 日志记录。

于 2013-08-13T08:50:39.643 回答