【问题标题】:compile postgresql from source从源代码编译 postgresql
【发布时间】:2020-03-23 22:04:11
【问题描述】:

我需要对 /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。我应该如何处理源代码?

【问题讨论】:

    标签: postgresql ubuntu compilation


    【解决方案1】:

    改变的意义何在?它似乎是为了造成破坏而设计的,它就是这样做的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2021-02-14
      • 2022-01-13
      相关资源
      最近更新 更多