如何查看postgresql"提醒通知"来自应用程序

时间:2017-03-14 14:55:49

标签: postgresql go

我正在编写小应用程序。现在我需要记录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编写的当前版本中,我们在控制台中记录消息以进行调试:

enter image description here

谢谢你!

2 个答案:

答案 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消息的回调函数