Postgresql 在两个不同的go应用程序中从postgres查询的不一致数据

Postgresql 在两个不同的go应用程序中从postgres查询的不一致数据,postgresql,go,go-gorm,go-gin,Postgresql,Go,Go Gorm,Go Gin,我已经构建了两个go应用程序,比如app1和app2,它们都连接到同一个postgres数据库。对于每个应用程序,我都使用gorm作为ORM app1用于更新数据库,app2是在gin中创建的API服务器,用于查询数据库中的数据 在app2中,我在程序开始时创建了一个数据库连接池,并在每个HTTP端点处理程序中重用它。在处理函数中,我使用gorm执行SQL语句并返回结果 SQL语句的旧返回值如下 从t_出版物中选择计数(*)——返回-->2641 当我在app1中插入4条新记录时,我可以在app

我已经构建了两个go应用程序,比如app1app2,它们都连接到同一个postgres数据库。对于每个应用程序,我都使用gorm作为ORM

app1用于更新数据库,app2是在gin中创建的API服务器,用于查询数据库中的数据

在app2中,我在程序开始时创建了一个数据库连接池,并在每个HTTP端点处理程序中重用它。在处理函数中,我使用gorm执行SQL语句并返回结果

SQL语句的旧返回值如下

从t_出版物中选择计数(*)——返回-->2641

当我在app1中插入4条新记录时,我可以在app1psqlcli中获得正确的数据,就像

从t_出版物中选择计数(*)——返回-->2645

但是,当我检查执行相同SQL语句的app2的API端点时,它返回旧数据

curl localhost:8080/getPublications--返回-->2641

如果我重新启动app2,我就可以获得所需的正确数据。我不确定这是否是连接池中连接的生存期问题,有人能解释一下这个问题吗?谢谢

----编辑----

下面是我的一个app2处理函数

func GetOverview(db *gorm.DB) gin.HandlerFunc {
    var overview Overview
    // the query is just a simple select statement
    err := db.Raw(dbquery.GetOverview).Scan(&overview).Error
    return func(c *gin.Context) {
        if err == nil {
            c.JSON(http.StatusOK, gin.H{
                "status": "ok",
                "data":   overview,
            })
        } else {
            c.JSON(http.StatusInternalServerError, gin.H{
                "status": "internal server error",
                "data":   err,
            })
        }
    }
}

GetOverview
中只执行一次查询,然后在一个闭包中返回该查询的结果,该闭包用作
gin.HandlerFunc
,本质上是在注册处理程序时永远缓存查询结果

解决方案是将查询代码移动到实际的处理程序中:

func GetOverview(db *gorm.DB) gin.HandlerFunc {
    return func(c *gin.Context) {
        var overview Overview
        // the query is just a simple select statement
        err := db.Raw(dbquery.GetOverview).Scan(&overview).Error
        if err == nil {
            c.JSON(http.StatusOK, gin.H{
                "status": "ok",
                "data":   overview,
            })
        } else {
            c.JSON(http.StatusInternalServerError, gin.H{
                "status": "internal server error",
                "data":   err,
            })
        }
    }
}

您是否在app2中打开长期存在的事务?@Artur我在代码中没有打开任何手动事务。我已经编辑了我的问题并附加了我的处理函数,您可以检查是否有任何问题,谢谢。