【问题标题】:How to use the dbicdump to only dump specific table如何使用 dbicdump 仅转储特定表
【发布时间】:2016-06-15 08:08:01
【问题描述】:

我只需要从我的数据库中转储特定表,以便这些特定表(200 个表中的 3 个表)现在将由 DBIx::Class::Schema 实现。

这是来自文档 (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 我也无法在文档中找到他们的解释。

谢谢

【问题讨论】:

  • 从您发布的链接中“您可以使用 -o <option>=<value> 传递任何 DBIx::Class::Schema::Loader::Base 构造函数选项。”在提供的链接之后,您会得到“通常数据库名称是小写并用下划线分隔,如果您有 CamelCase 数据库名称,请使用 [-o preserve_case=1]。”至于 InflateColumn::DateTime,“Auto - 从日期和日期时间列创建 DateTime 对象。"

标签: mysql perl dbix-class


【解决方案1】:

您可以将the option 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/ ],
],

在这种情况下,只有 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;

这只会为您提供 foobarbaz 表。如果只有一个模式,则需要不带数组引用的带引号的正则表达式,并且您不想使用手动预设的名字对象(这是生成的 Schema 类中用于表的名称)。

【讨论】:

  • 您好,如果只有一个模式是什么意思?我错过了什么吗?我应该创建这个 ONE SCHEMA 吗?如何?我虽然该命令完全依赖于数据库模式。谢谢
  • @Cadz 我指的是相当混乱的文档引用,他们将两个数据库同时转储到两个模式类中。只需运行我发布的命令。我测试了它。一种简单的验证方法是在MyApp/Schema 文件夹上运行tree。如果它包含大量文件,则它不起作用。 ;)
猜你喜欢
  • 2011-02-28
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多