Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?
От | Tom Lane |
---|---|
Тема | Re: GIN logging GIN_SEGMENT_UNMODIFIED actions? |
Дата | |
Msg-id | 3424.1472569846@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: GIN logging GIN_SEGMENT_UNMODIFIED actions? (Fujii Masao <masao.fujii@gmail.com>) |
Ответы |
Re: GIN logging GIN_SEGMENT_UNMODIFIED actions?
|
Список | pgsql-hackers |
Fujii Masao <masao.fujii@gmail.com> writes: > I found that pg_xlogdump code for XLOG_GIN_INSERT record with > GIN_INSERT_ISLEAF flag has the same issue, i.e., > "unknown action 0" error is thrown for that record. > The latest patch fixes this. Hmm, comparing gin_desc() to ginRedoInsert() makes me think there are more problems there than that one. Aren't the references to "payload" wrong in all three branches of that "if" construct, not just the middle one? I'm inclined to suspect we should restructure this more like { ginxlogInsert *xlrec = (ginxlogInsert *) rec; - char *payload = rec + sizeof(ginxlogInsert); appendStringInfo(buf, "isdata: %c isleaf: %c", (xlrec->flags & GIN_INSERT_ISDATA)? 'T' : 'F', (xlrec->flags & GIN_INSERT_ISLEAF) ? 'T' : 'F'); if (!(xlrec->flags & GIN_INSERT_ISLEAF)) { + char *payload = rec + sizeof(ginxlogInsert); BlockNumber leftChildBlkno; BlockNumber rightChildBlkno; leftChildBlkno = BlockIdGetBlockNumber((BlockId) payload); payload += sizeof(BlockIdData); rightChildBlkno = BlockIdGetBlockNumber((BlockId) payload); payload+= sizeof(BlockNumber); appendStringInfo(buf, " children: %u/%u", leftChildBlkno, rightChildBlkno); } + if (XLogRecHasBlockImage(record, 0)) + appendStringInfoString(buf, " (full page image)"); + else + { + char *payload = XLogRecGetBlockData(record, 0, NULL); + if (!(xlrec->flags & GIN_INSERT_ISDATA)) appendStringInfo(buf, " isdelete: %c", (((ginxlogInsertEntry *) payload)->isDelete) ? 'T' : 'F'); ... etc etc ... regards, tom lane
В списке pgsql-hackers по дате отправления: