Как получить идентификатор запроса после выполнения командной строки psql/mysql CLI?

Я использую командную строку psql CLI, чтобы сделать запрос к Redshift. (вопрос относится и к mysql). Выполнение запроса может занять много времени. После отправки команды можно ли получить идентификатор запроса этого запроса во время его выполнения, не дожидаясь его завершения. Это возможно?

Например, если мне нужно отменить этот запрос через несколько часов или дней, я бы хотел отправить команду CANCEL/ABORT в серверную часть Redshift для этого конкретного запроса. Примечание: эта же база данных будет использоваться другими, поэтому я хотел бы знать идентификатор конкретного запроса, который я выполнил.

Также, скажем, команда psql выполняется в оболочке. Можно ли программно (python) в приложении получить идентификатор запроса из этого процесса CLI psql?

3 ответа

В Amazon Redshift есть несколько способов определения запущенных запросов:

STV_INFLIGHT - показывает только запущенные в данный момент запросы ( http://docs.aws.amazon.com/redshift/latest/dg/r_STV_INFLIGHT.html)

select userid, usename, query, pid, starttime, "text", 
suspended from stv_inflight s, pg_user u 
where s.userid = u.usesysid

STV_RECENTS - показывает текущие и недавно завершенные запросы со статусом ( http://docs.aws.amazon.com/redshift/latest/dg/r_STV_RECENTS.html)

select * from stv_recents;

Теперь, чтобы прервать запущенный запрос, вам нужен pid (идентификатор процесса) текущих запущенных запросов. Затем вы можете завершить запрос, используя одну из следующих команд:

select pg_cancel_backend(<pid>); OR
select pg_terminate_backend(<pid>) ; OR
cancel <pid>;

запрос #2

select userid, usename, query, s.pid, c.remotehost, c.application_name, 
starttime, "text", 
suspended from stv_inflight s, stl_connection_log c,  pg_user u 
where s.userid = u.usesysid and s.pid = c.pid

В MySQL вы можете запустить select connection_id() чтобы получить идентификатор текущего соединения перед выполнением запроса. Вы можете запустить kill <id> из другого соединения после запуска длинного запроса.

Для Redshift это select * from stv_recents where status='Running' и вы сможете получить pid оттуда

Другие вопросы по тегам