【问题标题】:How to find script running psql query?如何找到运行 psql 查询的脚本?
【发布时间】:2021-03-08 11:45:22
【问题描述】:

我想找到运行 psql 查询的脚本的名称。从 pg_stat_activity 我可以提取活动查询和 pid,但这个 pid 属于 postgres 进程。如果有什么方法可以将该 pid 匹配到脚本的 pid(例如来自 ps)?

【问题讨论】:

  • 这是不可能的。服务器只看到单个 SQL 语句,它不知道客户端上的“脚本”
  • 如果您使用psql -f .... 运行脚本,那么 psql 进程的 pid 通常会比后端进程的 pid 小一。当然,不能保证这一点。

标签: postgresql psql


【解决方案1】:

我认为完成这项工作的唯一方法是启动每个脚本

SET application_name = 'psql executing myscript.sql';

并以

结束
SET application_name = 'psql';

【讨论】:

    【解决方案2】:

    我还没有找到如何获取 psql 脚本名称,它出现在错误或 RAISE 上。

    例如: psql:/path/to/my_script.psql:9999:警告:错误消息。

    我想获取“/path/to/my_script.psql”,以在日志中显示正在运行的脚本。但是没找到方法。

    我使用的解决方法是将以下行放在我的 psql 脚本的顶部:

    \set scr_nam 'my_script_name.psql === '
    
    \set QUIET on \pset tuples_only on \pset format unaligned \pset pager \set QUIET
    SELECT TO_CHAR(clock_timestamp(),'Dy DD/MM/YYYY HH24:MI:SS,MS') || ' # ' || :'scr_nam' || 'START ===' msg;
    
    <code>
    the code of my psql script
    </code>
    
    \set QUIET on \pset format unaligned \pset tuples_only on \set QUIET off
    SELECT TO_CHAR(clock_timestamp(),'Dy DD/MM/YYYY HH24:MI:SS,MS') || ' # ' || :'scr_nam' || 'E N D ===' msg;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多