如何在执行 psql/mysql CLI 命令行后获取查询 ID?

How to get query ID after executing psql/mysql CLI command line?

我正在使用 psql CLI 命令行查询 Redshift。 (问题也适用于 mysql)。查询可能需要很长时间才能执行。发送命令后,是否可以获取该查询的查询 ID 是 运行 而无需等待它完成。这可能吗?

例如,如果我稍后需要中止该查询 hours/days,我想向该特定查询的 Redshift 后端发送一个 CANCEL/ABORT 命令。注意:同一个数据库会被其他人使用,所以我想知道我执行的具体查询的ID。

此外,假设 psql 命令在 shell 中是 运行。是否可以在应用程序中以编程方式 (python) 从该 psql CLI 进程获取查询 ID?

在 mysql 中,您可以 运行 select connection_id() 在 运行 查询之前获取当前连接的连接 ID。在启动长 运行ning 查询后,您可以从另一个连接 运行 kill <id>

对于 Redshift,它是 select * from stv_recents where status='Running',您可以从那里获得 pid

在 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(进程 ID)。然后,您可以使用以下命令之一终止查询 -

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