Postgresql pg_stat_活动中的查询是否被截断?

Postgresql pg_stat_活动中的查询是否被截断?,postgresql,Postgresql,我正在使用从pg_stat_活动中选择当前_查询查看当前执行的查询,但我注意到查询被截断。是否有任何解决方法或任何其他方式来查看当前执行的查询?您可以在postgresql中启用语句日志记录(log\u语句),然后检查日志。postgresql 8.4添加了参数“跟踪活动\u查询大小””。该值仍将被截断,但您可以控制其长度。极端情况下的另一种选择是使用gdb调试器附加到进程并打印查询 看 如果运行Google Cloud SQL实例,您仍然需要重新启动该服务才能生效,您可以在编辑实例-->标志部

我正在使用
从pg_stat_活动中选择当前_查询
查看当前执行的查询,但我注意到查询被截断。是否有任何解决方法或任何其他方式来查看当前执行的查询?

您可以在postgresql中启用语句日志记录(log\u语句),然后检查日志。

postgresql 8.4添加了参数“
跟踪活动\u查询大小”
”。该值仍将被截断,但您可以控制其长度。

极端情况下的另一种选择是使用gdb调试器附加到进程并打印查询


如果运行Google Cloud SQL实例,您仍然需要重新启动该服务才能生效,您可以在
编辑实例-->标志
部分中配置
跟踪活动\u查询\u大小


我个人将其设置为
32786

从PostgreSQL 13开始,
track\u activity\u query\u size
的最大值

如果使用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;

不是真的,如果SQL语句是一个永久运行的语句呢?(僵尸postgres进程)然后,由于它从未完成,您只能通过从pg_stat_活动中查询SELECT current_查询来查看它的运行时;在Postgres 9.5中取消了1KB的限制。如果升级数据库,可以将其删除。默认值为1kB。使用
show track\u activity\u query\u size
检查设置。应该显示16kB。我喜欢这种方法,但不幸的是,我得到的
“debug\u query\u string”的类型未知;将其强制转换为声明的类型
# ...
services:
  postgres:
    container_name: postgres
    image: postgis/postgis:13-3.1
    command:
      - "postgres"
      - "-c"
      - "track_activity_query_size=1048576"
# ...
SHOW track_activity_query_size;