Re: BUG #19078: Segfaults in tts_minimal_store_tuple() following pg_upgrade
Yuri Zamyatin <yuri@yrz.am>
From: Yuri Zamyatin <yuri@yrz.am>
To: David Rowley <dgrowleyml@gmail.com>
Cc: Jeff Davis <pgsql@j-davis.com>, pgsql-bugs@lists.postgresql.org
Date: 2025-10-15T14:21:29Z
Lists: pgsql-bugs
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix reset of incorrect hash iterator in GROUPING SETS queries
- 0b6a02f0355c 18.1 landed
- 5c0a20003b43 19 (unreleased) landed
-
Fix EPQ crash from missing partition directory in EState
- 1296dcf18b1c 18.1 landed
- 905e932f0922 19 (unreleased) landed
I found a much easier way.
create.sql:
> drop database if exists segtest;
> create database segtest;
> \c segtest;
> create table tcv_scene_datas(cv_scene_id bigint primary key) partition by range (cv_scene_id);
> do $$
> declare
> i int;
> range_start bigint;
> range_end bigint;
> partition_name text;
> begin
> for i in 0..100 loop
> range_start := 1 + (i * 10000);
> range_end := range_start + 10000;
> partition_name := 'tcv_scene_datas_' || LPAD(i::TEXT, 3, '0');
> execute format(
> 'create table %I partition of tcv_scene_datas for values from (%s) to (%s)',
> partition_name,
> range_start,
> range_end
> );
> end loop;
> end $$;
> insert into tcv_scene_datas(cv_scene_id) select id from generate_series(1,1_000_000) id;
crash.sql:
> \c segtest
> with ids as (select (random()*1_000_000)::int id from generate_series(1,1000))
> update tcv_scene_datas set cv_scene_id=cv_scene_id where cv_scene_id in(select id from ids);
Launch crash.sql in 16 threads of infinite loops:
> seq 16 | xargs -P 16 -I {} sh -c 'while true; do psql -f crash.sql; done'
In 1-2 minutes, 5 processes died with segfault.
Also I expected deadlocks with such query, strangely database did not report them.
Let me know if you need more data.
__
Best wishes, Yuri