首页 > 解决方案 > 如何使 JDBC 进行的查询显示在 postgres 日志中?

问题描述

在此处输入图像描述我正在使用 Postgres 作为数据库的 Spring Boot 服务器。我希望能够拥有来自服务器的查询的日志文件。我找到了我的 sql 日志,我可以看到我通过 psql 对数据库进行的查询,但是没有记录来自我的服务器通过 jdbc 的查询。如何让这些查询显示在我的日志文件中?或者,如果他们只是被记录在其他地方,有人能指出我正确的方向吗?

标签: javadatabasepostgresqlspring-bootjdbc

解决方案


如果log_statement=all来自您的 postgresql.conf 文件,但有时似乎无效,则该设置可能已在数据库或用户级别被覆盖。在发出“SHOW ALL”之前,请确保您连接到同一个数据库,并且与您的应用服务器连接的用户相同。

它们可能已被以下其中之一覆盖:

alter user <foo> set log_statements='none';
alter database <foo> set log_statements='none';

但是,为了确保用户不能对超级用户隐藏他们的活动,只有超级用户可以发出上述之一。如果您的应用程序以超级用户身份登录(不是一个好主意),那么它可能会在会话级别关闭日志记录,从而覆盖 conf 文件。

如果是上述更改设置的命令之一,您可以在 psql 中使用 \drds 来查看它,或者在 SQL 中使用:

SELECT rolname AS "Role", datname AS "Database",
pg_catalog.array_to_string(setconfig, E'\n') AS "Settings"
FROM pg_catalog.pg_db_role_setting s
LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase
LEFT JOIN pg_catalog.pg_roles r ON r.oid = setrole
ORDER BY 1, 2;

推荐阅读