如何在golang lib/pq postgresql驱动中设置应用程序名称?

wqsoz72f  于 12个月前  发布在  Go
关注(0)|答案(4)|浏览(147)

我正在编写一个Golang应用程序,并使用Golang postgres驱动程序-https://github.com/lib/pq/
我使用这样的连接字符串

'name:pass@host:port/dbname'

字符串
我尝试在conn字符串中添加application_name参数,但这不起作用

'name:pass@host:port/dbname?application_name=myapp'


是否可以从golang设置应用程序名称?(标准方式)

r55awzrz

r55awzrz1#

尽管文档中没有提到,但如果您查看lib/pq源代码,您会发现application_name是受支持的。
此样式连接可按需工作:

connstring := fmt.Sprintf("user='%s' password='%s' dbname='%s' host='%s' application_name='%s'", user, password, dbname, host, application_name)
db, err := sql.Open("postgres", connstring)

字符串

t2a7ltrp

t2a7ltrp2#

如果您查看documentation,则不支持application_name选项。也许您可以使用:用途:
fallback_application_name -未提供时回退的application_name。

name:pass@host:port/dbname?fallback_application_name=myapp

字符串

watbbzwu

watbbzwu3#

您可以通过以下两种方式之一设置应用程序名称。

// Application name as space-separated list of options.
sql.Open("postgres", "user=myuser password=mypass host=localhost port=5432 dbname=mydb sslmode=disable application_name=myapp")

字符串

// Application name as query param.
sql.Open("postgres", "postgres://myuser:mypass@localhost:5432/mydb?sslmode=disable&application_name=myapp")

cunj1qz1

cunj1qz14#

对于任何在2023年研究这个问题的人来说,如果你使用的是kubernetes或任何其他云原生环境,pq库还支持通过ENV变量设置应用程序名称,只需指定:

export PGAPPNAME=myapp

字符串
您可以通过检查连接状态来验证这一点:

SELECT * FROM pg_stat_activity ORDER BY application_name;


参考网址:https://github.com/lib/pq/blob/v1.10.9/conn.go#L2045

相关问题