pg_stat_activity中的查询被截断了?

75

我正在使用SELECT current_query FROM pg_stat_activity;来查看当前正在执行的查询,但我注意到查询结果被截断了。是否有解决方法或其他方式可以查看当前正在执行的查询?


Postgres 9.5中已经取消了1KB限制。如果您升级数据库,可以将其删除。 - Kevin Burke
7个回答

39
ALTER SYSTEM SET track_activity_query_size = 16384;

为使更改生效,您仍需重新启动该服务。


5
默认值为1kB。使用命令show track_activity_query_size;检查设置。应该显示16kB。 - Eugene Kulabuhov
你选择这个特定的数字有什么原因吗? - GG.
你选择这个特定的数字有什么原因吗? - undefined

32

PostgreSQL 8.4 添加了参数 "track_activity_query_size"。该值仍会被截断,但您可以控制其长度。


10

我喜欢这种方法,但不幸的是,我得到了“'debug_query_string' has unknown type; cast it to its declared type”的错误提示。 - user3132194
这在较新版本的gdb上有效:printf "%s\n",(char*)debug_query_string - Andy Beverley

4

从 PostgreSQL 13 开始,track_activity_query_size 的最大值增加到了 1MB

如果您使用 Docker,则可以按照以下方式配置您的 docker-compose 文件:

# ...
services:
  postgres:
    container_name: postgres
    image: postgis/postgis:13-3.1
    command:
      - "postgres"
      - "-c"
      - "track_activity_query_size=1048576"
# ...

如果您不使用Docker,可以在/var/lib/postgresql/data/postgresql.conf中设置此项设置。请确保重新启动数据库以应用该设置。您可以使用此查询检查是否已应用该设置:
SHOW track_activity_query_size;

2
使用以下命令获取您的postgres.conf文件路径:
psql -U postgres -c 'SHOW config_file'

如果您正在使用root用户,则只需执行以下操作:
SHOW config_file;

它将会输出类似以下的内容:
/var/lib/pgsql/data/postgresql.conf # Output of above command

然后使用vim编辑文件,将下面的参数更改为16kb。

track_activity_query_size=16384

请重新启动您的Postgres服务器。

之后,如果您运行SELECT current_query FROM pg_stat_activity;,它将显示更多的查询结果,但会截断到16KB,您可以增加所需的大小。


1
如果您运行Google Cloud SQL实例,可以在“编辑实例->标志”部分配置track_activity_query_size。我个人将其设置为32786

1

你可以在PostgreSQL中启用语句日志记录(log_statement),然后检查日志。


2
不是这样的,如果SQL语句是一个永久运行的语句呢?(僵尸Postgres进程)那么,由于它永远不会完成,您只能通过查询SELECT current_query FROM pg_stat_activity来查看它的运行时状态。 - user78706

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接