如何在gorm postgresql中定义只读副本

时间:2019-05-19 14:15:28

标签: postgresql go go-gorm

我在我的应用程序服务器中使用golang,并将gorm用作ORM。我正在使用postgresql作为Google Cloud sql中的数据库。

我为应用程序服务器正在使用的postgres创建了2个只读副本。

以前,我使用了node.js并进行了序列化,在那里,我可以将只读副本定义为

library(data.table)
dt <- data.table(matrix(rnorm(1000), ncol = 100))
melt(dt, measure.vars = 1:ncol(dt))
#>       variable        value
#>    1:       V1 -0.636795202
#>    2:       V1  0.726632131
#>    3:       V1 -1.657745472
#>    4:       V1 -0.011510918
#>    5:       V1  0.005966138
#>   ---                      
#>  996:     V100  0.698911628
#>  997:     V100 -0.612117248
#>  998:     V100 -0.738224511
#>  999:     V100  1.616901156
#> 1000:     V100 -1.673199333

但是对于gorm,我看不到有任何方法可以做到(在文档中)。

因此,有没有一种方法可以定义只读副本,而gorm会处理它。如果没有,此用例的最佳实践是什么?

1 个答案:

答案 0 :(得分:0)

现在Gorm V2已经淘汰了,您可以仅针对此用例使用dbresolver插件。复制您作为示例给出的内容:

import (
  "gorm.io/gorm"
  "gorm.io/plugin/dbresolver"
  "gorm.io/driver/postgres"
)

db, err := gorm.Open(postgres.Open("host=localhost user=root"), &gorm.Config{})

db.Use(dbresolver.Register(dbresolver.Config{
    Replicas: []gorm.Dialector{
        postgres.Open("host=8.8.8.8 user=anotherusernamethanroot password=lolcats!"), 
        postgres.Open("host=localhost user=root"),
    },
    Policy: dbresolver.RandomPolicy{},
})

查看文档:{​​{3}}