我只需要从我的数据库中转储特定的表,以便DBIx::Class::Schema
现在可以实现这些特定表(确切地说,有300个表中的3个表)。
以下是文档(https://metacpan.org/pod/dbicdump)中的命令:
dbicdump -o dump_directory=./lib -o components='["InflateColumn::DateTime"]' -o preserve_case=1 MyApp::Schema dbi:mysql:database=database_name user pass;
我尝试在database_name之后附加表名但没有运气,它仍然会转储指定数据库中的所有表。需要帮忙。我在文档中找不到任何内容。
还有一个主题问题:
这意味着什么? -o components='["InflateColumn::DateTime"]' -o preserve_case=1
我也无法在文档中找到他们的解释。
由于
答案 0 :(得分:6)
您可以将the option constraint
传递给基础DBIx :: Class :: Schema :: Loader实例,以便它只选择某些表。文档对此有点模糊。
这些可以指定为正则表达式(最好是在qr // form),或作为arrayrefs的arrayref。正则表达式匹配 (不合格)表名,而arrayrefs根据匹配 " moniker_parts"
例如:
db_schema => [qw(some_schema other_schema)], moniker_parts => [qw(schema name)], constraint => [ [ qr/\Asome_schema\z/ => qr/\A(?:foo|bar)\z/ ], [ qr/\Aother_schema\z/ => qr/\Abaz\z/ ], ],
在这种情况下,只有some_schema和baz中的表foo和bar other_schema将被转储。
所以你需要传递给dbicdump
看起来像这样。
dbicdump \
-o dump_directory=./lib \
-o components='["InflateColumn::DateTime"]' \
-o preserve_case=1 \
-o constraint='qr/^(?:foo|bar|baz)$/' \
MyApp::Schema dbi:mysql:database=database_name user pass;
这只会为您提供表格 foo , bar 和 baz 。如果只有一个模式,则需要带引号的正则表达式而不使用数组引用,并且您不想使用手动预设的标记(这是生成的模式类中用于表的名称)。