使用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
相关产品推荐
相关产品推荐

