Perl 如何处理多个PostgreSQL模式和DBIx::Class?

Perl 如何处理多个PostgreSQL模式和DBIx::Class?,perl,postgresql,dbix-class,Perl,Postgresql,Dbix Class,在我的数据库中,我有5个独立的模式,以便将对象组织到逻辑组中。我使用dbicdump创建DBIx::Class模式,但注意到它只从公共模式加载表。我知道如何使用dbicdump加载所有模式,但现在我不知道从这里开始如何设置和使用它。我在网上查找了所有资源,发现的文档很少,我真的对这个解决方案不太满意。我想知道以前是否有人遇到过这种情况,以及他们是如何处理的。我相信您需要一个最新的DBIx::类,但我使用的是这样的: #!/usr/bin/perl use v5.14; use DBIx::Cl

在我的数据库中,我有5个独立的模式,以便将对象组织到逻辑组中。我使用
dbicdump
创建DBIx::Class模式,但注意到它只从公共模式加载表。我知道如何使用dbicdump加载所有模式,但现在我不知道从这里开始如何设置和使用它。我在网上查找了所有资源,发现的文档很少,我真的对这个解决方案不太满意。我想知道以前是否有人遇到过这种情况,以及他们是如何处理的。

我相信您需要一个最新的DBIx::类,但我使用的是这样的:

#!/usr/bin/perl
use v5.14;

use DBIx::Class::Schema::Loader qw/ make_schema_at /;
use Path::Tiny;

my $dest_dir = '.';
my $pkg_base = 'Foo';
(my $pkg_dir = $pkg_base) =~ s/::/\//g;

# Delete any previous run
path($dest_dir.'/'.$pkg_base)->remove_tree;

make_schema_at(
    $pkg_base.'::Schema',
    {
        debug          => 0,
        dump_directory => $dest_dir,
        db_schema      => '%',
        moniker_parts  => ['schema', 'name'],
        #rescan         => 1,
    },
    [ 'dbi:Pg:dbname=mydb port=5432', 'dbuser', 'dbpass' ],
);

exit;
这让我觉得:

Foo::Schema::Result::PublicTable1
Foo::Schema::Result::Schema2Table2
etc
中有各种选项的详细信息。我似乎记得,当我将文档与dbicdump的源代码放在一起时,我交叉引用了这些文档


HTH

我找到了这个,它几乎就是我所需要的。但我想要传统的::和真正的类(基于表)与包含sql随机位的视图类的分离,因此,我有:

#!/usr/bin/perl

use DBIx::Class::Schema::Loader qw/ make_schema_at /;
use Path::Tiny;

my $dest_dir = '../sql' ;
my $pkg_base = 'Cclite2';

# Delete any previous run
path($dest_dir.'/'.$pkg_base)->remove_tree;

make_schema_at(
    $pkg_base.'::Schema',
    {
        debug          => 0,
        dump_directory => $dest_dir,
        db_schema      => 'cclite2',
        moniker_parts  => ['schema', 'name'],
        moniker_part_separator => '::',
         naming         => {
            relationships    => 'v8',
            monikers         => 'v8',
            column_accessors => 'v8',
            force_ascii      => 1,

        },

    },

    [ 'dbi:Pg:dbname=dbname', 'dbuser', 'dbpass' ],
);

exit;
因此:

 ├── Schema
│   │   └── Result
│   │       ├── Cclite2
│   │       │   ├── OmAuth.pm
│   │       │   ├── OmCategory.pm
etc.
│   │       │   └── OmYellowpage.pm
│   │       ├── OmAdminBalanceView.pm
│   │       ├── OmAdsRss.pm
etc.
│   │       ├── OmTradesByUserView.pm
│   │       └── OmVolumeView.pm
│   └── Schema.pm

这不是对第一个答案的批评。这只是一个适合我的选择,也可能适合其他人。

太棒了,谢谢!我发现名字对象_parts所做的基本上是获取并连接这些部分,在本例中是schema(模式的名称)和name(表的名称)。因此,我最终得到了GeneralUser.pm(通用模式,用户表)。这正是我要找的,我希望能更容易地找到这方面的文档!是的,我花了一段时间。我不确定它是否记录在旧版本的DBIx::Class中。
Cclite2OmRegistry
对于模式中的表om_注册表
cclite2
给出[2021-04-13 13:12:45.49656][9448][error]Cclitedb628 get where error
$VAR1=bless({'msg'=>'DBIx::Class::Storage::DBI::_dbh_execute():DBI异常:DBD::Pg::st执行失败:错误:关系“om_注册表”不存在第1行:…om_注册表中的me.tags、me.nodetypes、me.feed、me.networks…
应为cclite2.om_注册表。我做错了什么?