在 Postgres/SQLAlchemy 上设置 application_name

2024-04-08

查看输出select * from pg_stat_activity;,我看到一个名为application_name, 描述here http://www.postgresql.org/docs/current/static/monitoring-stats.html#PG-STAT-ACTIVITY-VIEW.

我看到 psql 正确设置了这个值(到psql...),但我的应用程序代码(psycopg2/SQLAlchemy)将其留空。

我想将其设置为有用的东西,例如web.1, web.2等等,这样我以后就可以将我在其中看到的内容关联起来pg_stat_activity与我在应用程序日志中看到的内容。

我找不到如何使用 SQLAlchemy 设置此字段(如果情况紧急 - 即使使用原始 sql;我在 Heroku 上使用 PostgresSQL 9.1.7,如果这很重要的话)。

我错过了一些明显的东西吗?


答案是以下各项的组合:

http://initd.org/psycopg/docs/module.html#psycopg2.connect http://initd.org/psycopg/docs/module.html#psycopg2.connect

客户端库/服务器支持的任何其他连接参数都可以在连接字符串中或作为关键字传递。 PostgreSQL 文档包含完整的列表支持的参数 http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS。另请注意,可以使用环境变量将相同的参数传递到客户端库。

我们需要的变量是:

http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-应用程序-名称 http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-APPLICATION-NAME

application_name 可以是少于 NAMEDATALEN 字符的任何字符串(标准版本中为 64 个字符)。它通常由应用程序在连接到服务器时设置。该名称将显示在 pg_stat_activity 视图中并包含在 CSV 日志条目中。它还可以通过 log_line_prefix 参数包含在常规日志条目中。 application_name 值中只能使用可打印的 ASCII 字符。其他字符将替换为问号 (?)。

结合:

http://docs.sqlalchemy.org/en/rel_0_8/core/engines.html#custom-dbapi-args http://docs.sqlalchemy.org/en/rel_0_8/core/engines.html#custom-dbapi-args

基于字符串的参数可以直接从 URL 字符串作为查询参数传递:(例如...)create_engine() 还接受一个参数 connect_args,它是一个将传递给 connect() 的附加字典。当需要字符串以外的类型的参数,并且 SQLAlchemy 的数据库连接器不存在该参数的类型转换逻辑时,可以使用此方法

由此我们得到:

e = create_engine("postgresql://scott:tiger@localhost/test?application_name=myapp")

or:

e = create_engine("postgresql://scott:tiger@localhost/test", 
              connect_args={"application_name":"myapp"})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Postgres/SQLAlchemy 上设置 application_name 的相关文章

随机推荐