暂无图片
Postgres error: portal "C_n" does not exist
我来答
分享
暂无图片 匿名用户
Postgres error: portal "C_n" does not exist

应用后台日志报 :

报大量的SQLException : {0} java.sql.SQLException: ERROR: portal "C_7820" does not exist

因为应用是模块化的,没能定位具体语句。

核查 数据库pg_stat_activity 还是不能看出来对应的语句 。


后面不知道如何检查这个问题所在了

请大佬们给指点指点 。

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
zzzdwd

这个错误通常出现在使用PostgreSQL数据库时,尝试引用一个不存在的“portal”。Portal是PostgreSQL中一个查询执行的会话状态对象,它用于缓存从客户端接收的查询和参数信息,以便可以多次执行该查询。当出现"portal 'C_n' does not exist"这样的错误时,通常意味着你尝试使用一个名为'C_n'的portal,但是这个名字的portal在当前会话中并不存在。

解决方法:

确认你在引用portal之前已经创建了它。通常,你需要使用PREPARE语句来创建一个portal,然后使用EXECUTE来执行它。

如果你确信portal应该存在,可能是因为它已经在之前的会话中被创建并执行过,但是你的新会话没有继续上一个会话的状态。确保在新会话中重新准备(prepare)和执行(execute)查询。

如果你在脚本或应用程序中遇到这个错误,请检查代码确保在执行EXECUTE语句之前,有对应的PREPARE语句被执行。

如果你不需要使用portal,而是直接执行查询,那么确保你使用的是EXECUTE语句而不是尝试引用一个portal。

如果你是在使用某个应用程序或者ORM时遇到这个错误,请检查该应用程序或ORM是否正确处理了查询的准备和执行。

如果以上步骤无法解决问题,可能需要进一步检查数据库会话状态或查询准备逻辑。

暂无图片 评论
暂无图片 有用 0
暂无图片
彭冲

如果是因为数据库服务端使用连接池做了优化,jdbc参数可以加prepareThreshold=0

暂无图片 评论
暂无图片 有用 0
手机用户1559

两位大佬给出了对此问题处理方法。

这两天才出现这样的问题的SQLException : {0} java.sql.SQLException: ERROR: portal "C_n" does not exist

老师 ,再给指点指点,报这个不存在的对象 是应用从内存中调用SQL计划的执行计划还是SQL语句 出现的还是其他什么情景出现的?

如果是从内存中为命中抛出现对象不存在,那能否扩内存缓解此问题。

主要是想定位 什么SQL触发的,这个不存在的对象具体是什么 ?

万分感谢。

暂无图片 评论
暂无图片 有用 0
lianR

这个错误通常是由于PostgreSQL的客户端在尝试获取一个不存在的游标(portal)时产生的。"C_7820"就是这个不存在的游标的名字。

如果你无法直接在你的应用代码中找到这个游标的名字,那么可能的原因是你的应用在运行时动态生成了这个游标的名字。

你可以尝试以下方法来解决这个问题:

1.  检查你的应用是否在尝试获取一个已经关闭或者不存在的游标。
2.  检查你的应用是否在尝试获取一个在当前事务之外的游标。
3.  如果你的应用使用了连接池,检查连接池的配置。有可能是连接池在一个连接上打开了一个游标,然后在另一个连接上尝试获取这个游标。
4.  如果你的应用使用了多线程,检查你的线程同步。有可能是一个线程在尝试获取另一个线程已经关闭的游标。

如果以上方法都无法解决问题,你可能需要在你的应用中添加更多的日志,以便于跟踪游标的生命周期,找出是哪个部分的代码在尝试获取不存在的游标。

暂无图片 评论
暂无图片 有用 0
手机用户1559

老师,出现这样的问题的SQLException : {0} java.sql.SQLException: ERROR: portal "C_n" does not exist

一般什么情况导致这样的问题?

 报这个不存在的对象 是应用从内存中调用SQL计划的执行计划还是SQL语句 出现的还是其他什么情景出现的?

如果是从内存中为命中抛出现对象不存在,那能否扩内存缓解此问题。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏