gpt4 book ai didi

postgresql - 如何从go app查看postgresql "raise notice"

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:55 24 4
gpt4 key购买 nike

我正在用 go 编写小应用程序。现在我需要在应用程序控制台中记录 postgres“raise notice”消息。

我没有找到 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 调用这个函数并可以得到结果。

但是我如何从 go app 访问消息“来自 pg 的测试消息”?

在用 Node 编写的当前版本中,我们在控制台中记录消息以进行调试:

enter image description here

谢谢!

最佳答案

如果您正在使用 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;

关于postgresql - 如何从go app查看postgresql "raise notice",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42789361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com