Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
От | Noah Misch |
---|---|
Тема | Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data |
Дата | |
Msg-id | 20211103044203.GA570491@rfd.leadboat.com обсуждение исходный текст |
Ответ на | Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data (Sandeep Thakkar <sandeep.thakkar@enterprisedb.com>) |
Ответы |
Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
|
Список | pgsql-bugs |
On Tue, Nov 02, 2021 at 06:20:42AM +0530, Sandeep Thakkar wrote: > (gdb) frame 1 > > #1 0x40000000003fdc00:0 in equalTupleDescs (tupdesc1=0x60000000001f65e0, > > tupdesc2=0x60000000001fba08) > ... > (gdb) p tupdesc2->attrs[2] > > $6 = {attrelid = 27272, attname = {data = "b", '\000' <repeats 62 times>}, > atttypid = 19, attstattarget = -1, attlen = 64, attnum = 3, attndims = 0, > attcacheoff = -1, atttypmod = -1, attbyval = false, attalign = 99 'c', > attstorage = 112 'p', attcompression = 0 '\000', attnotnull = false, > atthasdef = false, atthasmissing = false, attidentity = 0 '\000', > attgenerated = 0 '\000', attisdropped = false, attislocal = true, > attinhcount = 0, attcollation = 950} That looks healthy. Since gdb isn't giving line numbers, let's single-step from the start of the function and see if that is informative. Please apply the attached patch, which just adds a test file. Then run "make -C src/test/subscription check PROVE_TESTS=t/080_step_equalTupleDescs.pl" and attach src/test/subscription/tmp_check/log/regress_log_080_step_equalTupleDescs in a reply to this email. On Mon, Nov 01, 2021 at 12:01:08AM +0500, Andrey Borodin wrote: > So far I didn't come up with a clear understanding how this might happen. Agreed. > The only idea I have: > 1. It seems equalTupleDescs() got two valid pointers, probably with broken data. > 2. Maybe relation->rd_rel (alloceted just before relation->rd_att) was used incorrectly? > 3. This could happen if CLASS_TUPLE_SIZE is calculated wrong. Don't we need to MAXALIGN everything due to added sizeof(relminmxid)? > #define CLASS_TUPLE_SIZE \ > (offsetof(FormData_pg_class,relminmxid) + sizeof(TransactionId)) See the comment at overread_tuplestruct_pg_cast for the reason why I think that can't cause an actual malfunction. Still, there's some possibility of this being the explanation.
Вложения
В списке pgsql-bugs по дате отправления: