database - 如何使用 DBIC 在 Catalyst 中创建多个数据库连接

标签 database perl postgresql catalyst dbix-class

我正在尝试连接到同一主机上的两个 postgres 数据库,但没有成功。 (这是两个独立的数据库而不是两个模式。)

我正在使用 Schema::Loader 使用以下命令创建结果类文件以及数据库连接文件:

第一个数据库:

script/myapp_create.pl 模型数据库 DBIC::Schema MyApp::Schema create=static dbi:Pg:dbname=handshake_vt 'user' 'pw' '{ AutoCommit => 1 }'

对于我的第二个数据库,我应该将表类放在同一个架构中,如下所示:

script/myapp_create.pl 模型 DB2 DBIC::Schema MyApp::Schema create=static dbi:Pg:dbname=members_vt 'user' 'pw' '{ AutoCommit => 1 }'

或者我应该创建一个单独的模式 namespace ,如下所示:

script/myapp_create.pl 模型 DB2 DBIC::Schema MyApp::Schema::Members create=static dbi:Pg:dbname=members_vt 'user' 'pw' '{ AutoCommit => 1 }'

我尝试了这两种方法,但两种方法都出现了略有不同的错误。

以下是我使用单一模式方法的文件:

1.  DB.pm

package MyApp::Model::DB;

use strict;
use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__->config(
    schema_class => 'MyApp::Schema',

    connect_info => {
        dsn => 'dbi:Pg:dbname=handshake_vt',
    }
);


2.  DB2.pm

package MyApp::Model::DB2;

use strict;
use base 'Catalyst::Model::DBIC::Schema';

__PACKAGE__->config(
    schema_class => 'MyApp::Schema',

    connect_info => {
        dsn => 'dbi:Pg:dbname=legislators_vt',
    }
);


3.  Schema.pm

package MyApp::Schema;

__PACKAGE__->load_namespaces;;

我的表类基本上是这样的:

package Handshake::Schema::Result::Country;

…

__PACKAGE__->table("countries");

感谢您的帮助。

最佳答案

您创建不同架构(每个数据库一个)的第一种方法是正确的。

每个数据库在单独的 Perl 命名空间中都有自己的 DBIx::Class 架构。

如果您将在 Catalyst 应用程序之外使用 DBIC 架构,那么选择 Catalyst 应用程序之外的命名空间也是有意义的,

例如Company::Model::DB1、Company::Model::DB2 和 Company::Web::App

然后,使用不同的连接参数为每个 DBIx::Class 架构创建一个 Catalyst 模型。

在 Catalyst 中,您可以使用 $c->model('DB1')$c->model('DB2') 访问两个模型。

关于database - 如何使用 DBIC 在 Catalyst 中创建多个数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425107/

相关文章:

perl - 了解数组的数组

python - txpostgres 存储过程返回游标

postgresql - 如何在 Doctrine 2 中使用 "DISTINCT ON (field)"?

ios - 未登录 iCloud 时 Swift CloudKit 读取

Mysql 使用不同的参数多次使用同一列构建查询。使用子查询?

sql - PostgreSQL 中的自定义排序(排序依据),与语言环境无关

Mysql按时间间隔选择时间戳

perl 日期计算,日期格式为 2012-02-03 00 :00:00

perl - 如何监视 Perl 调用堆栈?

sql - 错误 : invalid reference to FROM-clause entry for table "r"