2013-03-28 12 views
20

select * from pg_stat_activity;の出力を見ると、application_nameと呼ばれる列が表示され、hereと記載されています。Postgres/SQLAlchemyにapplication_nameを設定

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

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

SQLAlchemyを使用してこのフィールドを設定する方法が見つかりませんでした(プッシュしてもraw SQLであっても、私はPostgresSQL 9.1.7をHerokuで使用しています)。

明らかなものがありませんか?

答えて

27

これに対する答えは、の組み合わせです:クライアントライブラリ/サーバーでサポートされているその他の接続パラメータは、接続文字列またはキーワードのいずれかとして渡すことができ

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

APPLICATION_NAMEはNAMEDATALEN文字(標準ビルドで64文字)未満の任意の文字列を使用できます:私たちが必要とする変数である

。これは通常、サーバーに接続するとアプリケーションによって設定されます。名前はpg_stat_activityビューに表示され、CSVログエントリに含まれます。 log_line_prefixパラメータを使用して、通常のログエントリに含めることもできます。印刷可能なASCII文字のみがapplication_name値で使用されます。他の文字は疑問符(?)に置き換えられます。

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:[email protected]/test?application_name=myapp") 

か:

e = create_engine("postgresql://scott:[email protected]/test", 
       connect_args={"application_name":"myapp"}) 
+0

私は何かが分かっていないことを知っていました。:)ありがとうございました。これはSAのためにありがとうございます。 –

+0

おはよう、お待ちください。私は理由は分かりませんが、開発データベース(9.1.4/OSX)では正常に動作しますが、Herokuの共有データベース(9.1.8/Linux)では( 'invalid connection option" application_name "'を取得しても)うまく動作しません。同じSAバージョン、同じpsycopg2バージョン、おそらく異なるlibpqなどです。しかし、 'psql application_name = foo_bar'はローカルでもHerokuに対してもうまく動作します。それについてのヒント? –

+0

これは、psycopg2のことです。 psycopg2の接続を直接試して、バージョンを確認してください。また、libpqのバージョンも確認してください。 – zzzeek

関連する問題