C# 从流读取时Npgsql异常,Postgres
我在代码中间歇性地遇到这个错误。有时它一次又一次地发生。有时这种情况会发生十分之一。我在SQL中没有做任何独特或特殊的事情,这与StackOverflow上的另一张海报不同,后者在执行复制命令。我所做的就是选择 以下是堆栈跟踪:C# 从流读取时Npgsql异常,Postgres,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我在代码中间歇性地遇到这个错误。有时它一次又一次地发生。有时这种情况会发生十分之一。我在SQL中没有做任何独特或特殊的事情,这与StackOverflow上的另一张海报不同,后者在执行复制命令。我所做的就是选择 以下是堆栈跟踪: Exception while reading from stream at Npgsql.ReadBuffer.Ensure(Int32 count, Boolean dontBreakOnTimeouts) at Npgsql.NpgsqlConnector.DoR
Exception while reading from stream
at Npgsql.ReadBuffer.Ensure(Int32 count, Boolean dontBreakOnTimeouts)
at Npgsql.NpgsqlConnector.DoReadMessage(DataRowLoadingMode dataRowLoadingMode, Boolean isPrependedMessage)
at Npgsql.NpgsqlConnector.ReadMessageWithPrepended(DataRowLoadingMode dataRow LoadingMode)
at Npgsql.NpgsqlConnector.ReadMessage(DataRowLoadingMode dataRowLoadingMode)
at Npgsql.NpgsqlConnector.ReadExpecting[T]()
at Npgsql.NpgsqlDataReader.NextResultInternal()
at Npgsql.NpgsqlDataReader.NextResult()
at Npgsql.NpgsqlCommand.Execute(CommandBehavior behavior)
at Npgsql.NpgsqlCommand.ExecuteDbDataReaderInternal(CommandBehavior behavior)
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Npgsql.NpgsqlCommand.ExecuteReader()
at JBetaFinder.Program.portfolioSimulation(String beginResult, String endResult) in c:\Users\j\Documents\Visual Studio 2013\Projects\JBetaFinder\JBetaFinder\Program.cs:line 571
有没有关于如何避免这个错误的建议?这是Npgsql和postgres的问题吗
下面是我的SQL语句,它似乎是最有问题的:
select leg1.trade_date, sum(p.qty) as totalqty, max(gas.net_change)*10000 as avggaschange,
sum(((leg1.settlement_price - leg2.settlement_price) - (leg3.settlement_price - leg4.settlement_price))*qty*1000000) as spread_value_weight
from quant_portfolio p
inner join (select distinct trade_date, hub, product, strip, settlement_price, net_change
from public.icecleared_gas where contract = 'H') leg1
on p.leg1 = leg1.strip
inner join (select distinct trade_date, hub, product, strip, settlement_price, net_change
from public.icecleared_gas where contract = 'H') leg2
on p.leg2 = leg2.strip and leg1.trade_date = leg2.trade_date
inner join (select distinct trade_date, hub, product, strip, settlement_price, net_change
from public.icecleared_gas where contract = 'H') leg3
on p.leg3 = leg3.strip and leg1.trade_date = leg3.trade_date
inner join (select distinct trade_date, hub, product, strip, settlement_price, net_change
from public.icecleared_gas where contract = 'H') leg4
on p.leg4 = leg4.strip and leg1.trade_date = leg4.trade_date
inner join (select distinct trade_date, hub, product, strip, contract, settlement_price, net_change
from public.icecleared_gas where contract = 'H') gas
on gas.strip = (select min(leg1) from quant_portfolio where commodity = 'NG') and gas.trade_date = leg1.trade_date
where p.commodity = 'NG'
AND (leg1.trade_date>='xxx' and leg1.trade_date<='yyy')
group by leg1.trade_date
order by leg1.trade_date
我尝试重新安排SQL以取出子选择并使它们全部联接;没有帮助,同样的错误
下面是调用Npgsql的C代码:
query = new NpgsqlCommand(getFullQuantPortBeta.ToString().Replace("xxx", beginResult.ToString()).Replace("yyy", endResult.ToString()), conn);
dr = query.ExecuteReader();//code does not get past this line!
beta = 0;
while (dr.Read())
{
baselineData.Add(double.Parse(dr[2].ToString()));
responseData.Add(double.Parse(dr[3].ToString()));
if (baselineData.Count > 3)
{
Tuple<double, double> result = MathNet.Numerics.LinearRegression.SimpleRegression.Fit(baselineData.ToArray(), responseData.ToArray());
beta = result.Item2 * BETA_MULT;
Console.WriteLine("WEIGHT BETA = " + beta);
}
}
dr.Close();
我将CommandTimeout属性添加到我的连接字符串中,现在它似乎可以工作了。超时错误异常…请尝试设置
KeepAlive = 300
Npgsql发送keepalive查询之前连接不活动的秒数。将默认值设置为0以禁用
请参阅。在我的例子中,运行web应用程序的Docker容器和Postgres服务器之间存在防火墙问题。欢迎使用Stack Overflow,请在调用Npgsql的位置发布C。您的异常报告不完整:您没有发布异常类型,任何内部异常都不可能包含真正的问题。请把这些加在你的问题上。
KeepAlive = 300