Обсуждение: BUG #15684: Server crash on DROP partitioned table
The following bug has been logged on the website:
Bug reference: 15684
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 11.2
Operating system: Ubuntu 18.04
Description:
The following query:
create table at_partitioned (a int, b text) partition by range (a);
create table at_part_1 partition of at_partitioned for values from (0) to
(1000);
create table at_part_2 partition of at_partitioned for values from (1000) to
(2000);
create index on at_partitioned (b);
alter table at_partitioned alter column b type numeric using b::numeric;
alter table at_partitioned alter column b type numeric using b::numeric;
drop table at_partitioned cascade;
crashes server (on REL_11_2 and REL_11_STABLE) with the error messages:
psql:query.sql:7: WARNING: AbortTransaction while in COMMIT state
psql:query.sql:7: ERROR: SMgrRelation hashtable corrupted
PANIC: cannot abort transaction 575, it was already committed
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
psql:query.sql:7: connection to server was lost
and the following stack trace:
Core was generated by `postgres: law regression [local] DROP TABLE
'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007f715f347801 in __GI_abort () at abort.c:79
#2 0x00005624ec109351 in errfinish (dummy=dummy@entry=0) at elog.c:555
#3 0x00005624ec10b1c6 in elog_finish (elevel=elevel@entry=22,
fmt=fmt@entry=0x5624ec195190 "cannot abort transaction %u, it was
already committed") at elog.c:1376
#4 0x00005624ebd63826 in RecordTransactionAbort
(isSubXact=isSubXact@entry=false) at xact.c:1580
#5 0x00005624ebd63942 in AbortTransaction () at xact.c:2602
#6 0x00005624ebd64385 in AbortCurrentTransaction () at xact.c:3144
#7 0x00005624ebfeba10 in PostgresMain (argc=<optimized out>,
argv=argv@entry=0x5624ece2d748, dbname=<optimized out>,
username=0x5624ecdfeab8 "law") at postgres.c:3968
#8 0x00005624ebcc133d in BackendRun (port=0x5624ece25e40) at
postmaster.c:4361
#9 BackendStartup (port=0x5624ece25e40) at postmaster.c:4033
#10 ServerLoop () at postmaster.c:1706
#11 0x00005624ebf6a668 in PostmasterMain (argc=3, argv=0x5624ecdfc9f0) at
postmaster.c:1379
#12 0x00005624ebcc2f69 in main (argc=3, argv=0x5624ecdfc9f0) at main.c:228
Hi, On Sun, Mar 10, 2019 at 7:55 PM PG Bug reporting form <noreply@postgresql.org> wrote: > > The following query: > create table at_partitioned (a int, b text) partition by range (a); > create table at_part_1 partition of at_partitioned for values from (0) to > (1000); > create table at_part_2 partition of at_partitioned for values from (1000) to > (2000); > create index on at_partitioned (b); > alter table at_partitioned alter column b type numeric using b::numeric; > alter table at_partitioned alter column b type numeric using b::numeric; > drop table at_partitioned cascade; > > crashes server (on REL_11_2 and REL_11_STABLE) with the error messages: > psql:query.sql:7: WARNING: AbortTransaction while in COMMIT state > psql:query.sql:7: ERROR: SMgrRelation hashtable corrupted > PANIC: cannot abort transaction 575, it was already committed > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > psql:query.sql:7: connection to server was lost > > and the following stack trace: > [...] It seems to be the same bug as described in bug #15672 (https://www.postgresql.org/message-id/15672-b9fa7db32698269f@postgresql.org). I'm Cc-ing Amit just in case.
Hello Julien, 10.03.2019 22:04, Julien Rouhaud wrote: > Hi, > > On Sun, Mar 10, 2019 at 7:55 PM PG Bug reporting form > <noreply@postgresql.org> wrote: >> The following query: >> create table at_partitioned (a int, b text) partition by range (a); >> create table at_part_1 partition of at_partitioned for values from (0) to >> (1000); >> create table at_part_2 partition of at_partitioned for values from (1000) to >> (2000); >> create index on at_partitioned (b); >> alter table at_partitioned alter column b type numeric using b::numeric; >> alter table at_partitioned alter column b type numeric using b::numeric; >> drop table at_partitioned cascade; >> > It seems to be the same bug as described in bug #15672 > (https://www.postgresql.org/message-id/15672-b9fa7db32698269f@postgresql.org). > I'm Cc-ing Amit just in case. Yes, after applying the patch presented in that thread the crash is not reproduced. Thanks for the tip! Best regards, Alexander
On 2019/03/11 4:15, Alexander Lakhin wrote: > 10.03.2019 22:04, Julien Rouhaud wrote: >> Hi, >> >> On Sun, Mar 10, 2019 at 7:55 PM PG Bug reporting form >> <noreply@postgresql.org> wrote: >>> The following query: >>> create table at_partitioned (a int, b text) partition by range (a); >>> create table at_part_1 partition of at_partitioned for values from (0) to >>> (1000); >>> create table at_part_2 partition of at_partitioned for values from (1000) to >>> (2000); >>> create index on at_partitioned (b); >>> alter table at_partitioned alter column b type numeric using b::numeric; >>> alter table at_partitioned alter column b type numeric using b::numeric; >>> drop table at_partitioned cascade; >>> >> It seems to be the same bug as described in bug #15672 >> (https://www.postgresql.org/message-id/15672-b9fa7db32698269f@postgresql.org). >> I'm Cc-ing Amit just in case. Thanks Julien. To summarize, the problem is that partition/child indexes, when recreated due to ALTER COLUMN, all get the same relfilenode, which amounts to a corrupted catalog state. > Yes, after applying the patch presented in that thread the crash is not > reproduced. > Thanks for the tip! Unfortunately, the patch I posted there is still very sketchy. I will try to revise it this week and will be waiting for comments. Thanks, Amit