【问题标题】:NpgsqlCopyIn fails by timeout ("CommandTimeout" setting ignored)NpgsqlCopyIn 因超时而失败(“CommandTimeout”设置被忽略)
【发布时间】:2014-03-31 13:02:02
【问题描述】:

我有一个非常大的数据集(900K 记录,140Mb 磁盘空间)存储在客户端应用程序 (.NET 4.0) 的 CSV 文件中。我需要以最快的方式将此数据加载到 Postgres 9 db。我使用 Npgsql "NpgsqlCopyIn" 技术(Npgsql 库版本=2.1.0)。

对于探针负载 (138K) 插入工作正常 - 大约需要 7 秒。 但是整批(900K),代码抛出超时异常:

  "ERROR: 57014: canceling statement due to statement timeout"

堆栈跟踪是:

Npgsql.NpgsqlState.d_9.MoveNext() 在 Npgsql.NpgsqlState.ProcessAndDiscardBackendResponses(NpgsqlConnector 上下文)在 Npgsql.NpgsqlCopyInState.SendCopyDone(NpgsqlConnector 上下文)在 Npgsql.NpgsqlCopyInState.StartCopy(NpgsqlConnector 上下文,NpgsqlCopyFormat 复制格式)在 Npgsql.NpgsqlState.d_9.MoveNext() 在 Npgsql.NpgsqlState.ProcessAndDiscardBackendResponses(NpgsqlConnector 上下文)在 Npgsql.NpgsqlConnector.ProcessAndDiscardBackendResponses() 在 Npgsql.NpgsqlCommand.ExecuteBlind() 在 Npgsql.NpgsqlCopyIn.Start()

我尝试将 CommandTimeout 设置为千值(>7200),零;为连接“超时”参数尝试了相同的值。我也试图通过连接字符串设置“CommandTimeout”,但仍然没有结果——“ERROR 57014”一次又一次地出现。

请帮助正确加载批处理!

这是我使用的代码:

private static void pgBulkCopy(string connection_string, FileInfo fiDataFile)
{
    using (Npgsql.NpgsqlConnection con = new Npgsql.NpgsqlConnection(connection_string))
    {
        con.Open();

        FileStream ifs = new FileStream(fiDataFile.FullName, FileMode.Open, FileAccess.Read);
        string queryString = "COPY schm.Addresses(FullAddress,lat,lon) FROM STDIN;";
        NpgsqlCommand cmd = new NpgsqlCommand(queryString, con);
        cmd.CommandTimeout = 7200; //7200sec, 120 min, 2 hours

        NpgsqlCopyIn copyIn = new NpgsqlCopyIn(cmd, con, ifs);

        try{
            copyIn.Start();    
            copyIn.End();
        }catch(Exception ex)
        {
            Console.WriteLine("[DB] pgBulkCopy error: " + ex.Message );
        }
        finally
        {
            con.Close();
        }
    }
}

【问题讨论】:

    标签: c# .net postgresql timeout npgsql


    【解决方案1】:

    Npgsql 有一个关于命令超时和 NpgsqlCopyIn 处理的错误。

    您可以测试我们当前的 master,我们对命令超时处理进行了很多修复。

    您可以在我们的 GitHub 页面下载该项目的副本:https://github.com/npgsql/Npgsql/archive/master.zip

    请试一试,让我们知道它是否适合您。

    【讨论】:

    • Francisco,我测试了 Npgsql 的 master,它运行良好!迫不及待地想看到它发布!
    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多