Quarkus+Testcontainers+Cucumber重置数据库时类型18049缓存查找失败
问题:pg_dump/pg_restore重置数据库后触发PostgreSQL类型OID缓存错误
执行SQL查询时出现如下错误:
org.postgresql.util.PSQLException: ERROR: cache lookup failed for type 18049
上下文
- 技术栈:Quarkus、Hibernate ORM、集成PostGIS的Testcontainers PostgreSQL、Cucumber
- 环境差异:
- Testcontainers测试环境中PostGIS表位于
publicschema - 生产环境中PostGIS表位于
systemschema
- Testcontainers测试环境中PostGIS表位于
- 已移除数据库中自动更新几何数据的触发器及相关几何数据,但问题仍未解决
相关代码
DatabaseResource类和TestConfig类代码如下(保留原内容)
已尝试的解决方法
- 校验PostGIS schema的环境差异
- 为pg_restore添加
--clean和--disable-triggers参数 - 禁用Hibernate缓存、关闭SessionFactory
- 清除JTA事务
问题更新
- 手动将空间数据从
publicschema复制到systemschema可解决问题,但需实现自动化流程 - 根因定位:pg_restore操作后OID发生更新,导致Hibernate或PostgreSQL驱动的类型缓存失效
- 临时修复:恢复数据库后通过Hibernate查询
locations表刷新缓存;尝试过PostGIS更新、执行DISCARD ALL、ANALYZE等操作,均未达到理想效果
内容的提问来源于stack exchange,提问作者Самир Шахмурадлы
相关产品推荐
相关产品推荐

