如何使用 Yesod/Persistent 访问两个不同的数据库服务器?

How to access two different database servers with Yesod/Persistent?

我正在使用 Yesod 和 Persistent 构建网站(我使用的是基本的 yesod mysql 脚手架)。 我需要访问与主数据库不同的数据库,但 runDB 使用 默认连接参数和连接。有没有一种简单的方法可以使用 Persistent 和两个不同的连接参数?

创建连接的函数(如runSqlite)在IO monad 中。这意味着您可以使用 liftIO 在 Yesod 应用程序的 Handler 函数中调用它。您还可以立即 运行 查询数据库,这非常简洁。

查看脚手架代码,应该很容易定义另一个 rundDB 访问另一个使用不同连接参数创建的池。这意味着还要修改 Settings 以读取和存储额外的连接信息。 然而,主要问题之一是,需要记住根据要加载的数据类型使用哪个连接(或 runDB)。另一种解决方案是使用联合 tables。 MySql(或 MariaDB)允许创建连接到远程数据库的代理 table。尽管它需要一些设置,但这是在客户端安全且更易于使用的优势。