55

の出力を見ると、ここで説明されているselect * from pg_stat_activity;という列が表示されます。application_name

psql がこの値を (... に) 正しく設定していることがわかりpsqlますが、私のアプリケーション コード (psycopg2/SQLAlchemy) は空白のままにしています。

web.1これを、 などの便利なものに設定したいので、後でアプリケーション ログに表示web.2される内容と関連付けることができます。pg_stat_activity

SQLAlchemy を使用してこのフィールドを設定する方法を見つけることができませんでした (そして、プッシュが発生した場合 - 生の SQL を使用しても、問題があれば、Heroku で PostgresSQL 9.1.7 を使用しています)。

明らかな何かが欠けていますか?

4

1 に答える 1

72

これに対する答えは、次の組み合わせです。

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

クライアント ライブラリ/サーバーでサポートされているその他の接続パラメーターは、接続文字列またはキーワードとして渡すことができます。PostgreSQL のドキュメントには、サポートされているパラメータの完全なリストが含まれています。また、環境変数を使用して同じパラメーターをクライアント ライブラリに渡すこともできます。

必要な変数は次のとおりです。

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

文字列ベースの引数は、クエリ引数として URL 文字列から直接渡すことができます: (例...) create_engine() は、connect() に渡される追加の辞書である引数 connect_args も受け取ります。これは、文字列以外の型の引数が必要で、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"})
于 2013-03-28T20:12:43.897 に答える