如何在postgres中添加WARNING消息的信息

时间:2017-10-05 14:19:49

标签: database postgresql postgresql-9.6

我收到以下警告

  

警告:已有正在进行的交易

在我的数据库中,我想调查发生这种情况的原因。但是由于数据库可以通过许多微服务访问,我无法找到哪个服务正在尝试启动新的/并行连接。

如何提高此邮件的信息级别?就像一个时间戳,谁试图启动连接,如client_addr字段或任何其他信息,将揭示故障的根源。

提前致谢

2 个答案:

答案 0 :(得分:1)

源 - 启动事务两次,例如:

t=# begin;
BEGIN
Time: 22.594 ms
t=# begin;
WARNING:  there is already a transaction in progress
BEGIN
Time: 1.269 ms

查看谁,何时,将log_min_messages设置为至少警告,log_line_prefix将%h设置为IP,将%m设置为时间,%u设置为用户名 - https://www.postgresql.org/docs/current/static/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHAT,({当然{1}}并检查日志

答案 1 :(得分:1)

你可以做很多事情来了解发生了什么。首先,您可以检查PostgreSQL日志以查看正在进行的操作。如果您无权访问日志。您可以通过运行下一个查询来检查事务中哪些查询处于活动状态,空闲状态或空闲状态:

SELECT
  pid,
  query,
  state
FROM pg_stat_activity

通过添加到查询WHERE state='active'

,您可以查看当前正在运行的交易

重要提示:

如果您使用服务访问数据库(特别是c#services(根据经验)),您必须检查您与数据库的连接。因为如果配置不正确,您最终会得到每个交易只能接受一个用户的服务,而这真的很危险。

问题可能是您通过一个连接和“服务”将呼叫发送到数据库。从不打开新的联系。因此,PostgreSQL将拒绝任何传入的查询并设置消息:

  

警告:已有正在进行的交易

因为传输正在使用连接通道。