我正在编写小应用程序。现在我需要记录postgres"提醒通知"应用程序控制台中的消息。
我找不到postgresql在* sql.Conn中存储消息的地方(我使用go / sql和lib / pq驱动程序)
例如,
create function show_mes() returns int as $$
begin
raise notice 'test message from pg';
return 1;
end
$$ language plpgsql;
来自go app的我调用此函数可以得到结果。
但是我怎样才能访问那些消息"测试来自pg&#34的消息。来自go app?
在Node编写的当前版本中,我们在控制台中记录消息以进行调试:
谢谢你!答案 0 :(得分:1)
如果您正在使用lib/pq
,则可以使用其LISTEN/NOTIFY
支持来实现您的目标。
在Go方面,您可以使用以下内容:
package main
import (
"log"
"time"
"github.com/lib/pq"
)
func main() {
dburl := "postgres:///?sslmode=disable"
li := pq.NewListener(dburl, 10*time.Second, time.Minute, func(event pq.ListenerEventType, err error) {
if err != nil {
log.Fatal(err)
}
})
if err := li.Listen("raise_notice"); err != nil {
panic(err)
}
for {
select {
case n := <-li.Notify:
// n.Extra contains the payload from the notification
log.Println("notification:", n.Extra)
case <-time.After(5 * time.Minute):
if err := li.Ping(); err != nil {
panic(err)
}
}
}
}
然后你的postgres函数看起来像这样:
CREATE FUNCTION show_mes() RETURNS int AS $$
BEGIN
PERFORM pg_notify('raise_notice', 'test message from pg');
RETURN 1;
END
$$ LANGUAGE plpgsql;
答案 1 :(得分:0)
我已经创建了示例:
https://github.com/jackc/pgx/issues/838
使用pgx驱动程序
用于连接postgres消息的回调函数