繁体   English   中英

从源代码编译 postgresql

[英]compile postgresql from source

我需要对 /src/backend/storage/smgr/md.c 文件中的 mdwrite 函数进行更改(部分代码,因为我无法固定屏幕截图)

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

它让我在 ubuntu 控制台上writing block 0 of relation global/1136 我应该如何使用源代码?

改变的重点是什么? 它似乎是为了造成破坏而设计的,这就是它所做的。

完整的消息应该是这样的:

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 刷新请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM