【问题标题】:NamedParameterJdbcTemplate query and get generated PID from PostgreSQLNamedParameterJdbcTemplate 查询并从 PostgreSQL 获取生成的 PID
【发布时间】:2021-10-02 14:53:28
【问题描述】:

我正在使用 PostgreSQL,需要从 PostgreSQL 获取进程标识符。 PostgreSQL 中每个正在运行的查询都有自己的 PID,我们可以通过 pg_stat_activity 获得。

SELECT * FROM pg_catalog.pg_stat_activity;

这会返回一个 PID,我们可以使用它来停止在数据库中执行查询

SELECT pg_terminate_backend(<pid of the process>);

应用程序是 Spring Boot / Java,我使用 NamedParameterJdbcTemplate 进行了一些大型查询。它们可能需要很长时间,在某些情况下我需要终止执行查询。

问题是如何从生成的 SQL 查询中获取 PID?

【问题讨论】:

    标签: java postgresql spring-boot


    【解决方案1】:

    PID 与查询无关,但与连接(=会话)有关。一旦您建立了连接(通过 JDBC 驱动程序),该连接(会话)的 PI​​D 就不会改变。

    所以你可以使用:

    select pg_backend_pid();
    

    随时获取会话的PID。

    由于您很可能使用连接池,因此您需要确保调用 pg_backend_pid() 是使用您的 NamedParameterTemplate 使用的同一连接完成的(例如,通过将两个语句放入单个事务中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2017-10-24
      • 2016-11-07
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多