Подтвердить что ты не робот

Установка имени_приложения в Postgres/SQLAlchemy

Глядя на вывод select * from pg_stat_activity;, я вижу столбец с именем application_name, описанный здесь.

Я вижу, что psql правильно устанавливает это значение (до psql...), но мой код приложения (psycopg2/SQLAlchemy) оставляет его пустым.

Я хотел бы установить это на что-то полезное, например web.1, web.2 и т.д., поэтому я мог бы позже сопоставить то, что я вижу в pg_stat_activity, с тем, что я вижу в журналах приложений.

Я не мог найти, как установить это поле с помощью SQLAlchemy (и если push нажимает - даже с raw sql, я использую PostgresSQL 9.1.7 на Heroku, если это имеет значение).

Я пропустил что-то очевидное?

4b9b3361

Ответ 1

ответ на это представляет собой комбинацию:

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

Любой другой параметр подключения, поддерживаемый клиентской библиотекой/сервером, может быть передан либо в строке подключения, либо в виде ключевых слов. Документация PostgreSQL содержит полный список поддерживаемых параметров . Также обратите внимание, что те же параметры могут быть переданы в клиентскую библиотеку с использованием переменных среды.

где нужна переменная:

http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-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_args, который является дополнительным словарем, который будет передан connect(). Это можно использовать, когда требуются аргументы типа, отличного от строки, а в соединителе базы данных SQLAlchemys не существует логики преобразования типов для этого параметра

получим:

e = create_engine("postgresql://scott:[email protected]/test?application_name=myapp")

или

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