如何将dbicdump用于onyl dump特定表

Cad*_*adz 5 mysql perl dbix-class

我只是需要从我的数据库,使得这些转储特定表特定的表(表3是准确了200桌)现在将执行DBIx::Class::Schema.

以下是docs(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;
Run Code Online (Sandbox Code Playgroud)

我尝试在database_name之后附加表名但没有运气,它仍然会转储指定数据库中的所有表.需要帮忙.我在文档中找不到任何内容.

还有一个主题问题:

这意味着什么?-o components='["InflateColumn::DateTime"]' -o preserve_case=1我也无法在文档中找到他们的解释.

谢谢

sim*_*que 6

您可以将该选项constraint传递给基础DBIx :: Class :: Schema :: Loader实例,以便它只选择某些表.文档对此有点模糊.

这些可以指定为正则表达式(最好是在qr //表单上),或者指定为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/ ],
],
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只会转储some_schema中的表foo和bar以及other_schema中的baz.

所以你需要传递的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;
Run Code Online (Sandbox Code Playgroud)

这只会给你表foo,barbaz.如果只有一个模式,则需要带引号的正则表达式而不使用数组引用,并且您不希望使用手动预设的标记(这是生成的模式类中用于表的名称).