如何从 PostgresException 中获取错误 sql

Posted

技术标签:

【中文标题】如何从 PostgresException 中获取错误 sql【英文标题】:How to get error sql from PostgresException 【发布时间】:2022-01-20 13:41:54 【问题描述】:

ASP.NET Core 6 MVC 应用程序使用 EF Core 和 Npgsql。

Ef Core 命令之类的

await ctx.Kasutajas.Where((k) => k.Kasutaja1 == suurusername).SingleOrDefaultAsync();

在缺少列的情况下抛出 PostgresException。 BatchCommand 属性为空。看起来 EF Core 不使用批处理命令接口。这种情况下如何获取错误sql?

   app.Use(async (context, next) =>
            
                try
                
                    await next.Invoke();
                
                catch (PostgresException ex)
                
ex.BatchCommand in null.
ex.InternalQuery is null.
            Debug.WriteLine(ex.InternalQuery);
?? How to get error Sql ?
                
                
            );

在 .NET 5 中,Ngpsql 对此有语句属性,但根据

https://www.npgsql.org/doc/release-notes/6.0.html#npgsqlstatement-and-postgresexceptionstatement-have-been-removed

如何在异常处理程序的 CATCH 块中获取错误 SQL? 讨论https://github.com/npgsql/npgsql/issues/4222 不提供解决方案。

【问题讨论】:

【参考方案1】:

正在为常规命令添加 PostgresException.BatchCommand 支持,例如 6.0 之前的 Npgsql 中的 PostgresException.Statement。见https://github.com/npgsql/npgsql/issues/4222。

【讨论】:

以上是关于如何从 PostgresException 中获取错误 sql的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Redshift 集群时出错 - Npgsql.PostgresException: 28000: no pg_hba.conf entry for host

PostgreSQL:负载测试引发错误 - Npgsql.PostgresException:'53300:抱歉,客户端已经太多了'

PostgresException: 42883: function ifnull(integer, integer) does not exist

如何从颤动的表单中获取值?

如何在ios中从手机中获取所有图像

如何在快速路由器获取请求中从节点获取中使用获取