You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pgmock运行内存PostgreSQL时遇数据库页面无效错误求助

解决pgmock执行查询时出现"invalid page in block"错误的问题

你遇到的错误是:

Failed to connect to the database error: invalid page in block 22 of relation base/12971/2674

问题出在你硬编码了PostgreSQL客户端的连接配置,没有使用pgmock生成的连接字符串,导致客户端连接的实例与mock服务不匹配,引发数据库文件结构异常。

解决方案:使用pgmock返回的连接字符串初始化客户端

修改代码,将客户端的初始化逻辑放到获取connectionString之后,直接使用该字符串创建Client实例,确保连接参数完全匹配mock服务:

const { Client } = require('pg');
const { PostgresMock } = require('pgmock');

async function connectToDatabase() {
    try {
        const mock = await PostgresMock.create();
        const connectionString = await mock.listen(5432);
        console.log("connectionString: " + connectionString);
        
        // 使用mock生成的连接字符串初始化客户端
        const client = new Client(connectionString);
        
        await client.connect();
        console.debug("Connected to the mock postgres database");
        
        await client.query(`CREATE TABLE Persons (
            PersonID int,
            LastName varchar(255),
            FirstName varchar(255),
            Address varchar(255),
            City varchar(255)
        )`);
        console.log("Table created successfully");

        // 操作完成后关闭连接和mock服务
        await client.end();
        await mock.stop();
    } catch (err) {
        console.error("Failed to connect to the database", err);
        throw err;
    }
}

connectToDatabase();

补充排查点

  • 如果问题仍存在,尝试升级pgmock到最新版本,避免版本兼容问题
  • 可以尝试在创建mock时指定数据库参数,例如:
    const mock = await PostgresMock.create({ database: 'test_db' });
    

内容的提问来源于stack exchange,提问作者sp-sathish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:07:26