查看select * from pg_stat_activity;的输出,我看到一个名为application_name的列,描述为here.

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

我想将其设置为一些有用的值,比如web.1web.2等,以便稍后将我在pg_stat_activity中看到的内容与我在应用程序日志(log)中看到的内容关联起来.

我找不到如何使用SQLAlchemy设置这个字段(如果有必要的话,我会在Heroku上使用Postgressql9.1.7,即使是原始sql).

我是不是漏掉了什么明显的东西?

推荐答案

答案是:

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

客户端库/服务器支持的任何其他连接参数可以在连接字符串中传递,也可以作为关键字传递.PostgreSQL文档包含了supported parameters个选项的完整列表.还请注意,可以使用环境变量将相同的参数传递给客户机库.

我们需要的变量是:

http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-APPLICATION-NAME

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

结合:

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")

或者:

e = create_engine("postgresql://scott:tiger@localhost/test", 
              connect_args={"application_name":"myapp"})

Postgresql相关问答推荐

如何在PSQL中查询jsonb列包含字符串的嵌套数组

如何确定要与给定转储文件一起使用的pg_Restore版本?

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

postgres 不同类型的更新

未更改表上的 Postgres 环绕预防

如何在 sequelize 使用 db postgres 中通过外键更新记录和更新包含许多记录关系

如何将 JSONB 对象数组合并为 PostgreSQL 中的单个对象

PostgreSQL 在 mySQL 中的 date_trunc

整数除法返回 0

如何使 Java 和 Postgres 枚举一起工作以进行更新?

在远程机器上Restore dump

IntegrityError:postgres 从转储恢复后,所有具有 ForeignKey 的模型/字段的id列中的空值

如何使用字符串作为 PostgreSQL 咨询锁的键?

如何在 Postgresql 中正确使用 FETCH FIRST?

如何使用 psql 命令列出、创建、使用和判断数据库?

Postgresql:在插入列时(或之前)自动小写文本

无法安装 psycopg2 Ubuntu

Postgres 类似于 SQL Server 中的 CROSS APPLY

PG::ConnectionBad FATAL:role "Myname" does not exist

Postgis / Geodjango:无法确定数据库的 PostGIS 版本