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

Posted

技术标签:

【中文标题】如何在 gorm postgresql 中定义只读副本【英文标题】:How do define read replicas in gorm postgresql 【发布时间】:2019-10-06 02:21:32 【问题描述】:

我在我的应用服务器中使用 golang 并使用 gorm 作为 ORM。我使用 postgresql 作为谷歌云 sql 中的数据库。

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

以前,我使用 node.js 和 sequelize,在那里,我可以将只读副本定义为

    read: [
       host: '8.8.8.8', username: 'anotherusernamethanroot', password: 'lolcats!' ,
       host: 'localhost', username: 'root', password: null 
    ],
    write:  host: 'localhost', username: 'root', password: null 
  ,

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

那么,有没有一种方法可以定义只读副本并由 gorm 处理。如果不是,此用例的最佳做法是什么?

【问题讨论】:

有什么办法吗? 【参考方案1】:

现在 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,
)

查看文档:https://gorm.io/docs/dbresolver.html

【讨论】:

以上是关于如何在 gorm postgresql 中定义只读副本的主要内容,如果未能解决你的问题,请参考以下文章

如何在PostgreSQL中建只读账号

如何在 PostgreSQL 中创建只读用户?

如何在 postgresql 中创建只读视图,类似于 oracle?

如何指定数组gorm golang的默认值?

sql 如何在PostgreSQL中创建只读用户

Gorilla Mux 和 GORM 失败