Re: BUG #15672: PostgreSQL 11.1/11.2 crashed after dropping apartition table

Поиск
Список
Период
Сортировка
От Amit Langote
Тема Re: BUG #15672: PostgreSQL 11.1/11.2 crashed after dropping apartition table
Дата
Msg-id ea06533c-8514-1ec7-112a-2581f03bc070@lab.ntt.co.jp
обсуждение исходный текст
Ответ на Re: BUG #15672: PostgreSQL 11.1/11.2 crashed after dropping apartition table  (Michael Paquier <michael@paquier.xyz>)
Ответы Re: BUG #15672: PostgreSQL 11.1/11.2 crashed after dropping apartition table
Список pgsql-bugs
Hi,

On 2019/03/07 9:03, Michael Paquier wrote:
> On Wed, Mar 06, 2019 at 03:06:53PM +0000, PG Bug reporting form wrote:
>> 1. create a partition table with the following constraints
>>     a. with a unique key on partition key and a varchar type field
>>     b. using hash partition
>> 2. alter the  length of the varchar type field
>> 3. drop the partition table in a transaction
>> 4. crash
> 
> I can reproduce the failure easily, not on HEAD but with
> REL_11_STABLE:

Same here.  I could reproduce it with 11.0.

> (gdb) bt
> #0  __GI_raise (sig=sig@entry=6) at
> ../sysdeps/unix/sysv/linux/raise.c:50
> #1  0x00007f585729b535 in __GI_abort () at abort.c:79
> #2  0x000055eef597e60a in errfinish (dummy=0) at elog.c:555
> #3  0x000055eef5980c50 in elog_finish (elevel=22, fmt=0x55eef5a41408
> "cannot abort transaction %u, it was already committed") at
> elog.c:1376
> #4  0x000055eef5479647 in RecordTransactionAbort (isSubXact=false) at
> xact.c:1580
> #5  0x000055eef547a6c0 in AbortTransaction () at xact.c:2602
> #6  0x000055eef547aef4 in AbortCurrentTransaction () at xact.c:3104
> 
> That's worth an investigation, SMgrRelationHash is getting messed up
> which causes the transaction commit to fail where it should not.

Looking at what was causing the SMgrRelationHash corruption, it seems
there were entries with same/duplicated relnode value in pendingDeletes list.

The problem start when ALTER TABLE users ALTER COLUMN is executed.
create table users(user_id int, name varchar(64), unique (user_id, name))
partition by list(user_id);

create table users_000 partition of users for values in(0);
create table users_001 partition of users for values in(1);
select relname, relfilenode from pg_class where relname like 'users%';
          relname           │ relfilenode
────────────────────────────┼─────────────
 users                      │       16441
 users_000                  │       16446
 users_000_user_id_name_key │       16449
 users_001                  │       16451
 users_001_user_id_name_key │       16454
 users_user_id_name_key     │       16444
(6 rows)

alter table users alter column name type varchar(127);
select relname, relfilenode from pg_class where relname like 'users%';
          relname           │ relfilenode
────────────────────────────┼─────────────
 users                      │       16441
 users_000                  │       16446
 users_000_user_id_name_key │       16444    <===  duplicated
 users_001                  │       16451
 users_001_user_id_name_key │       16444    <===  duplicated
 users_user_id_name_key     │       16444    <===  duplicated
(6 rows)

Ran out off time...

Thanks,
Amit



В списке pgsql-bugs по дате отправления:

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: BUG #15672: PostgreSQL 11.1/11.2 crashed after dropping apartition table
Следующее
От: Julien Rouhaud
Дата:
Сообщение: Re: BUG #15669: Error with unnest in PG 11 (ERROR: 0A000)