Обсуждение: BUG #19336: TRAP: failed Assert("!IsTransactionOrTransactionBlock()")
BUG #19336: TRAP: failed Assert("!IsTransactionOrTransactionBlock()")
От
PG Bug reporting form
Дата:
The following bug has been logged on the website:
Bug reference: 19336
Logged by: Nikita Kalinin
Email address: n.kalinin@postgrespro.ru
PostgreSQL version: 18.1
Operating system: ubuntu 22.04
Description:
With this parameter in postgresql.conf: debug_parallel_query = on
If you execute the query: SELECT pg_sleep_for('5 minutes');
and then kill the postgres process with signal 9, you get the following in
the log:
2025-11-27 06:44:27.263 UTC [643318] FATAL: postmaster exited during a
parallel transaction
TRAP: failed Assert("!IsTransactionOrTransactionBlock()"), File: "pgstat.c",
Line: 673, PID: 643318
/lib/x86_64-linux-gnu/libasan.so.8(+0x831e0)[0x7058d98831e0]
postgres: test postgres 127.0.0.1(44374)
SELECT(ExceptionalCondition+0x156)[0x616e63da3dcf]
postgres: test postgres 127.0.0.1(44374)
SELECT(pgstat_report_stat+0x43)[0x616e635c9ced]
postgres: test postgres 127.0.0.1(44374) SELECT(+0x51c29fe)[0x616e635c99fe]
postgres: test postgres 127.0.0.1(44374)
SELECT(shmem_exit+0x29f)[0x616e633beca2]
postgres: test postgres 127.0.0.1(44374) SELECT(+0x4fb7750)[0x616e633be750]
Maybe the Assert shouldn't be printed to the log, and only the following
output should remain?
postgres=# SELECT pg_sleep_for('5 minutes');
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
The connection to the server was lost. Attempting reset: Failed.
On 2025-Nov-27, PG Bug reporting form wrote:
> With this parameter in postgresql.conf: debug_parallel_query = on
>
> If you execute the query: SELECT pg_sleep_for('5 minutes');
>
> and then kill the postgres process with signal 9, you get the following in
> the log:
>
> 2025-11-27 06:44:27.263 UTC [643318] FATAL: postmaster exited during a
> parallel transaction
> TRAP: failed Assert("!IsTransactionOrTransactionBlock()"), File: "pgstat.c",
> Line: 673, PID: 643318
> /lib/x86_64-linux-gnu/libasan.so.8(+0x831e0)[0x7058d98831e0]
> postgres: test postgres 127.0.0.1(44374)
> SELECT(ExceptionalCondition+0x156)[0x616e63da3dcf]
> postgres: test postgres 127.0.0.1(44374)
> SELECT(pgstat_report_stat+0x43)[0x616e635c9ced]
> postgres: test postgres 127.0.0.1(44374) SELECT(+0x51c29fe)[0x616e635c99fe]
> postgres: test postgres 127.0.0.1(44374)
> SELECT(shmem_exit+0x29f)[0x616e633beca2]
> postgres: test postgres 127.0.0.1(44374) SELECT(+0x4fb7750)[0x616e633be750]
>
> Maybe the Assert shouldn't be printed to the log, and only the following
> output should remain?
Hmm, why does it matter? If you've kill -9'd the process, everything
will be restarted anyway. It makes no difference whether the assertion
hits or not, does it?
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Las navajas y los monos deben estar siempre distantes" (Germán Poo)