Re: BUG #15446: Crash on ALTER TABLE - Mailing list pgsql-bugs

From Dean Rasheed
Subject Re: BUG #15446: Crash on ALTER TABLE
Date
Msg-id CAEZATCXVPUu+hV1n_-V8Q2-TVtof=kzpdAv01VJmzGmTwsQ9NA@mail.gmail.com
Whole thread Raw
In response to Re: BUG #15446: Crash on ALTER TABLE  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #15446: Crash on ALTER TABLE
List pgsql-bugs
On Sat, 5 Jan 2019 at 00:38, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Dmitry Molotkov <aldarund@gmail.com> writes:
> > сб, 5 янв. 2019 г. в 01:25, Andres Freund <andres@anarazel.de>:
> >> Having to download and run code from dropbox is neither trust-inspiring
> >> (I'd have review all the included code before running it), nor low friction...
>
> > Code is pretty much default empty django project with just with added
> > package that cause error.
>
> It's the "django" part of that that is outside my comfort zone, and I'd
> guess Andres' as well.  I don't run django, and I'm not interested in
> learning about it just to reproduce a bug report.  As Andres said,
> this would get looked at a lot quicker if the requirements to reproduce
> it were low --- like, say, a small shell or perl or python script.

Boiling down the queries from the links provided, I can reproduce this
with the following simple test case:

DROP TABLE IF EXISTS foo;
CREATE TABLE foo (a int);
ALTER TABLE foo ADD COLUMN b double precision DEFAULT 0.2;
ALTER TABLE foo ALTER COLUMN b TYPE varchar(5) USING b::varchar(5);

which crashes with the following:

#0  0x00007fca1c77515e in __memcpy_sse2_unaligned () from /lib64/libc.so.6
#1  0x0000000000921a6c in datumCopy (value=35278072, typByVal=false, typLen=-1)
    at datum.c:159
#2  0x0000000000a2a56d in RelationBuildTupleDesc (relation=0x7fca1343bdc8)
    at relcache.c:620
#3  0x0000000000a2b7a0 in RelationBuildDesc (targetRelId=16395, insertIt=false)
    at relcache.c:1157
#4  0x0000000000a2df1c in RelationClearRelation (relation=0x7fca13439c88,
    rebuild=true) at relcache.c:2446
#5  0x0000000000a2e460 in RelationFlushRelation (relation=0x7fca13439c88)
    at relcache.c:2584
#6  0x0000000000a2e572 in RelationCacheInvalidateEntry (relationId=16395)
    at relcache.c:2636
#7  0x0000000000a20fac in LocalExecuteInvalidationMessage (msg=0x2161710)
    at inval.c:587
#8  0x0000000000a20d0c in ProcessInvalidationMessages (hdr=0x21612a0,
    func=0xa20ea9 <LocalExecuteInvalidationMessage>) at inval.c:458
#9  0x0000000000a217dd in CommandEndInvalidationMessages () at inval.c:1093
#10 0x00000000005585c0 in AtCCI_LocalCache () at xact.c:1373
#11 0x0000000000557fd9 in CommandCounterIncrement () at xact.c:955
#12 0x000000000069f819 in ATExecAlterColumnType (tab=0x21a2370,
    rel=0x7fca13439c88, cmd=0x21a34d0, lockmode=8) at tablecmds.c:9642
#13 0x0000000000693af6 in ATExecCmd (wqueue=0x7ffcb60097a8, tab=0x21a2370,
    rel=0x7fca13439c88, cmd=0x21a34d0, lockmode=8) at tablecmds.c:4181
#14 0x00000000006933b1 in ATRewriteCatalogs (wqueue=0x7ffcb60097a8, lockmode=8)
    at tablecmds.c:4025
#15 0x0000000000692b9e in ATController (parsetree=0x21a00c8,
    rel=0x7fca13439c88, cmds=0x21a3528, recurse=true, lockmode=8)
    at tablecmds.c:3691
#16 0x00000000006928db in AlterTable (relid=16395, lockmode=8, stmt=0x21a00c8)
    at tablecmds.c:3365


It looks like the problem was introduced in PG11 by 16828d5c02 (Fast
ALTER TABLE ADD COLUMN with a non-NULL default). The first ALTER TABLE
adds a new column with a non-null default, setting atthasmissing and
attmissingval. Then the second ALTER TABLE changes the type of the new
column, but it fails to update attmissingval to match, and thus it
falls over when trying to re-open the relation because the value in
attmissingval is no longer compatible with the attribute type.

Regards,
Dean


pgsql-bugs by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: BUG #15446: Crash on ALTER TABLE
Next
From: Phil Hildebrand
Date:
Subject: Re: BUG #15570: Vacuum analyze ERROR: MultiXactId XXXX has not beencreated yet -- apparent wraparound