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;
答案 0 :(得分:2)
pg_listening_channels
报告会在您自己的会话中侦听 。它不会(也不能)报告来自其他会话的听众。
没有办法直接通过系统在Pg 9.2中获取该信息。您可以始终使用信息维护一个边桌,但是您仍然存在保持同步的常见问题。
你为什么要这样做呢?像这样使用NOTIFY
有点奇怪。为什么不让每个人都在同一个频道上收听并通过一个电话通知所有人?
您是否正在尝试编写审核日志记录?如果是这样,请考虑使用现有解决方案之一或仅使用csv日志记录。