如何从 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