首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP/Laravel5将数据Postgres移动到MySQL

问使用PHP/Laravel5将数据Postgres移动到MySQL
EN

Stack Overflow用户
提问于 2015-05-29 11:23:39
回答 1查看 1.4K关注 0票数 0

我在用:

  • 本地Postgres DB
  • 具有MySQL DB的Laravel 5也是本地的
  • Postgres DB包含来自OTRS的表结构--表“票证”上有超过91.000行。

我需要将数据从一个DB移动到另一个DB。我所做的是编译一个大型查询,将所需的所有数据合并起来,并在Laravel结构中创建的PHP脚本中运行它。然后,我使用雄辩的方法迭代了结果,插入到MySQL中。我知道这很糟糕,但为了做到这一点,我不得不删除PHP的内存和时间限制,虽然花了很长时间,但它还是起了作用!

现在我意识到我遗漏了一些东西,我需要重新运行一个类似的查询(结果是相同的行数),但是这次我只需要在MySQL DB上添加一个字段。

我的问题是,我如何优化这个过程?我在考虑用块,但我不知道怎么做。

澄清:

  • MySql的票证表包含91397行和5列
  • Postgres票据表还有91397行和6列。
  • 我在Laravel (MySQL)上创建了一个迁移,它添加了额外的列(尽管它是空的)

如果我给你看我的代码可能会更简单。

链接

EN

回答 1

Stack Overflow用户

发布于 2015-05-30 04:50:55

你可以用雄辩来做这件事。下面是我应该做的事情(未经测试,可能需要一些调优):

在config\database.php中设置两个DB连接。为同一资源创建两个模型(您只能使用一个模型,但我不使用),我将命名它们为M1和M2,具有不同的连接属性。为此,在模型中创建一个属性:protected $connection = 'connection_name'。

所以基本上:

代码语言:javascript
复制
class M1 extends Model {
   protected $connection = 'connection_name';
   protected $table = 'table_name';
   protected $guarded = [];

对于不同的M2和$connection也是一样的。

现在,在控制器方法中或在执行代码的任何地方,您可以使用雄辩的方法对查询块进行块处理:

代码语言:javascript
复制
//assuming you are transferring M1's db to M2's

M1::chunk(200, function($m1s)  //if you wanna use only one model, this should be M1::on('connection-name')->chunk(...
{
   foreach ($m1s as $m1)
   {
      $m2 = new M2();
      //this does not copy model-specific attributes like $connection
      $m2->fill( $m1->getAttributes() );  
      $m2->save();
   }
});

我想这是工作,你能测试一下吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30528336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档