我试图弄清楚为什么重新启动后我的 postgresql 日志中会出现一些奇怪的条目:
2010-05-14 11:30:25 EEST LOG: database system was shut down at 2010-05-14 11:30:22 EEST
2010-05-14 11:30:25 EEST LOG: autovacuum launcher started
2010-05-14 11:30:25 EEST LOG: database system is ready to accept connections
2010-05-14 11:30:25 EEST LOG: incomplete startup packet
2010-05-14 11:30:40 EEST WARNING: there is already a transaction in progress
2010-05-14 11:30:40 EEST LOG: could not receive data from client: Connection reset by peer
2010-05-14 11:30:40 EEST LOG: unexpected EOF on client connection
首先,这令2010-05-14 11:30:25 EEST LOG: incomplete startup packet
我感到困扰。有人知道为什么会发生这种情况吗?
而且,这个非常奇怪:2010-05-14 11:30:40 EEST WARNING: there is already a transaction in progress
......
答案1
incomplete startup packet
表示已建立连接,但 Postgres 服务器未收到预期的握手(我收到大量此类信息,因为我的监控系统会检查以确保端口 5432 已打开,但还不够智能,无法实际登录并查询数据库)。
这是否是问题取决于您是否预期有连接而不是握手:对我来说,每 5 分钟看到一次不是问题,但如果您没有预期到,此消息可能表明您正在接受端口扫描。
WARNING: there is already a transaction in progress
意思就是:有人试图在已经处于事务中的情况下启动事务 ( BEGIN ... BEGIN
)。
如果您经常看到这种情况,则有人在程序中编写了一些错误的 SQL,您应该查找/修复它,因为相应的COMMIT
andROLLBACK
语句可能无法按预期执行。如果您只看到一次,之后再也没有看到,那么可能是有人在 psql 中犯了一个错误。
答案2
在我们的环境中,启动数据包不完整是由于 haproxy 以可编程间隔(对于我们来说,每 600000 毫秒)发送心跳造成的。我们在 tcp 模式下使用 haproxy 来中继业务用户请求以再次运行 postgres 报告。