Npgsql没有返回最新的行

时间:2016-10-06 21:35:24

标签: c# postgresql npgsql

我正在编写一个应用程序,它会轮询postgresql DB以检查由另一个应用程序插入的新行。大多数时候一切都有效,但偶尔会出现一些问题。#34;挂起"。即使数据库中存在较新的记录,应用程序也会读取第二行。

通过以下代码实现轮询

while (!cancellationToken.IsCancellationRequested) {
    try {
        var lastRow = await RetreiveLastRow();

        Logger.Trace($"Last row id = {lastRow.Id}");
        // rest of code...
    } catch (Exception e) {
        Logger.Error(e, "Error");
    }

    await Task.Delay(TimeSpan.FromMilliseconds(100));
}

上面的方法每隔~100ms在循环中调用。

{{1}}

我确信数据库中有更新的记录。我可以用PgAdmin看到它,但我的应用程序看不到我看到的内容。

当另一行添加到表中时,一切都恢复正常 - 应用程序看到最新数据(一段时间)。一段时间后,当新记录添加到表中时,问题会重新出现。

我怀疑查询结果是由驱动程序缓存的,并且不会从db刷新。所以我尝试通过添加" polling = false"来关闭连接轮询。连接字符串(如果有的话,应该禁用缓存)。它似乎解决了这个问题,但我并不完全确定。

这真的是缓存问题吗?如果是,可以在不关闭连接轮询的情况下解决吗?

0 个答案:

没有答案