скомпилировать postgresql из исходного кода - PullRequest
0 голосов
/ 24 марта 2020

Мне нужно внести изменения в функцию mdwrite в файле /src/backend/storage/smgr/md.c (часть кода, потому что я не могу закрепить скриншот)

seekpos = (off_t) BLCKSZ * (blocknum % ((BlockNumber) RELSEG_SIZE));

    Assert(seekpos < (off_t) BLCKSZ * RELSEG_SIZE);

    **buffer[0] = 'A';**

    nbytes = FileWrite(v->mdfd_vfd, **buffer**, BLCKSZ, seekpos, WAIT_EVENT_DATA_FILE_WRITE);

    **buffer[0] = 'B';**

    TRACE_POSTGRESQL_SMGR_MD_WRITE_DONE(forknum, blocknum,
                                        reln->smgr_rnode.node.spcNode,
                                        reln->smgr_rnode.node.dbNode,
                                        reln->smgr_rnode.node.relNode,
                                        reln->smgr_rnode.backend,
                                        nbytes,
                                        BLCKSZ);

Компиляция и установка прошла успешно, но при настройке:

 /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Это дает мне writing block 0 of relation global/1136 на консоли Ubuntu. Как мне работать с исходным кодом?

1 Ответ

0 голосов
/ 24 марта 2020

Какой был смысл изменения? Кажется, он предназначен для того, чтобы вызвать havo c, что он и сделал.

Полное сообщение должно выглядеть примерно так:

LOG:  request to flush past end of generated WAL; request 41/28, currpos 0/1523128
CONTEXT:  writing block 0 of relation global/1213
FATAL:  xlog flush request 41/28 is not satisfied --- flushed only to 0/1523128
CONTEXT:  writing block 0 of relation global/1213

Итак, вы повредили LSN на странице. заголовок буфера для записи, который затем вызвал запрос WAL flu sh, который невозможно выполнить.

...