标签: data-migration

是否有Ruby数据库迁移gem,它可以帮助您将内容从旧结构移动到新结构?

是否有任何Ruby gems /库可以帮助您从旧的DB结构迁移到新的结构?ActiveRecord迁移在跟踪新的数据库结构方面做得很好,但我想知道是否有什么可以帮助您将整个遗留数据库迁移到新结构:

transfer_from(:source_table => 'person', :destination_table => 'dudes_and_dudets') do

  from :name, :to => :full_name

  from :dob, :to => :age do |dob|    # this would, for example, load the result  
    (Date.today - dob)/60/60/24/365  # of the block into :age
  end

end
Run Code Online (Sandbox Code Playgroud)

(我意识到你可以像使用AR一样轻松地进行这些变换,但我希望魔术库可以有更多的变换.

伯恩斯

ruby database activerecord data-migration ruby-on-rails

11
推荐指数
1
解决办法
2997
查看次数

从Postgres迁移到SQL Server 2008

我需要将数据库从Postgres 7迁移到SQL Server 2008.我熟悉SSIS导入和导出向导,但我对如何定义数据源或定义数据提供程序感到困惑.

将Postgres迁移到SQL Server的最佳方法是什么,如何为postgres定义数据源/驱动程序?

sql-server postgresql ssis data-migration

11
推荐指数
2
解决办法
2万
查看次数

如何从Django迁移中发送信号?

我使用Django 1.7迁移,特别是想要用初始数据填充新创建的数据库.因此,我使用数据迁移.它看起来像这样:

def populate_with_initial_data(apps, schema_editor):
    User = apps.get_model("auth", "User")
    new_user = User.objects.create(username="nobody")

class Migration(migrations.Migration):

    ...

    operations = [
        migrations.RunPython(populate_with_initial_data),
    ]
Run Code Online (Sandbox Code Playgroud)

同时,我希望UserDetails每个新用户都有一个模型实例:

@receiver(signals.post_save, sender=django.contrib.auth.models.User)
def add_user_details(sender, instance, created, **kwargs):
    if created:
        my_app.UserDetails.objects.create(user=instance)
Run Code Online (Sandbox Code Playgroud)

但是:此信号仅在迁移之外有效.原因是,apps.get_model("auth", "User")django.contrib.auth.models.User没有发送信号的情况完全不同.如果我尝试手动执行此操作,则会失败:

signals.post_save.send(django.contrib.auth.models.User, instance=julia, created=True)
Run Code Online (Sandbox Code Playgroud)

这失败了,因为那时,信号处理程序尝试使用O2O 创建一个新的 UserDetails指向历史记录 User:

ValueError: Cannot assign "<User: User object>": "UserDetails.user" must be a "User" instance.
Run Code Online (Sandbox Code Playgroud)

游民.

好的,我可以直接调用信号处理程序.但是我必须UserDetails在关键字参数(以及它需要的其他历史类)中传递历史类.此外,UserDetails具有此数据迁移的应用程序不是具有此数据迁移的应用程序,因此这将是一个丑陋的依赖性,很容易破坏,例如,如果UserDetails应用程序被删除INSTALLED_APPS.

那么,这只是一个当前的限制,我必须解决丑陋的代码和FixMe评论?或者有没有办法从数据迁移中发送信号?

django data-migration django-signals django-migrations

11
推荐指数
1
解决办法
2246
查看次数

如何对Django South"数据迁移"进行单元测试

我使用south创建了一个数据迁移,它采用了一个版本表并将其转换为:

major: 1, minor: 2, micro: 3, release: a
Run Code Online (Sandbox Code Playgroud)

变得更简单:

name: 1.2.3.a
Run Code Online (Sandbox Code Playgroud)

现在我想使用django单元测试(1.3beta)来测试这个数据迁移.

如何指定要使用的自定义夹具,我可以如何以编程方式向前滚动向前和向后滚动迁移?

unit-testing data-migration django-south

10
推荐指数
2
解决办法
1526
查看次数

获取Rails错误"语法错误,意外的tSYMBEG,期待keyword_do或'{'或'('"

我正在尝试通过键入以下内容将subject_idcourse_id迁移到users表:

rails generate migration add_course_id_and_subject_id_to_users course_id:integer, subject_id:integer
Run Code Online (Sandbox Code Playgroud)

但是,它会导致错误:

_add_course_id_and_subject_id_to_users.rb:4:语法错误,意外的tSYMBEG,期待keyword_do或'{'或'(''

不知道为什么会这样.

data-migration ruby-on-rails

10
推荐指数
1
解决办法
1万
查看次数

将Redis迁移到AWS Elasticache,停机时间最短

让我们首先列出一些事实:

  • Elasticache不能成为我现有Redis设置的从属设备.真正的耻辱,这将是非常有效的.
  • 我只有一台要迁移的Redis服务器,大约有3GB的数据.
  • 停机时间必须少于10分钟.我认为通常的"停止站点,停止redis,使用快照配置群集"将花费更长的时间.

与此问题类似:如何将elasticache redis群集设置为从属?

关于这可能如何工作的一个想法:

  1. 将Redis设置为使用AOF并同时触发BGSAVE.
  2. BGSAVE完成后,为Elasticache集群配置RDB种子.
  3. 停止该站点并关闭我的本地Redis实例.
  4. 使用aof-replay工具将AOF重放到Elasticache中.
  5. 再次启动站点,指向Elasticache集群.

我的问题:

  1. 我怎样才能保证我的AOF文件在RDB文件结束的时候开始,并且没有数据写入?
  2. 是否有Redis维护人员支持的AOF工具,或者它们都是第三方解决方案,因此(可能)可靠性有问题吗?*

*对于此类工具的任何作者都没有违法行为,我确信它们很棒,我只是对使用同一团队编写的工具更有信心,以避免潜在的兼容性错误.

data-migration amazon-web-services redis

10
推荐指数
1
解决办法
2921
查看次数

South不会及时为新模型创建默认权限,以便后续迁移使用它们

我并不是100%确定我这样做是正确的,但我认为我发现了一个问题,即auth.Permission当你从头开始初始化数据库时,很快就没有创建对象以便迁移使用它们.

重要细节:

  • 我正在尝试从头开始初始化Django DB ./manage.py syncdb --migrate --noinput

  • 我的链中有11次迁移

  • 第一次迁移创建了一个名为的新模型 myapp.CompanyAccount

  • 第9次迁移尝试使用以下方式获取权限myapp.change_companyaccount:

p = orm[ "auth.Permission" ].objects.get( codename = "change_companyaccount" )

此时,会引发异常:

django.contrib.auth.models.DoesNotExist: Permission matching query does not exist

我假设在第一次迁移完成时创建了为每个对象定义的默认权限(根据http://docs.djangoproject.com/en/dev/topics/auth/#default-permissions) ,但它们似乎并非如此.如果我在异常之后重新运行迁移,它会第二次运行,因为显然现在存在权限,并且第9次迁移可以无错误地执行.

在第9次迁移运行之前的某个时间,是否可以做任何事情来"冲洗"所有内容,以便整个过程可以在一次通过中运行而不会挽救?

感谢您提供任何帮助/建议.

编辑:为了回应下面的John的评论,我发现以下命令行序列将起作用:

  1. ./manage.py syncdb (这会初始化默认的Django表)
  2. ./manage.py migrate myapp 0001 (这会导致创建CompanyAccount表)
  3. ./manage.py migrate myapp (这一直迁移到最终没有错误)

不幸的是,跳过上面的步骤#2意味着你在0009迁移中得到了相同的异常,这告诉我我原来的怀疑是正确的,新模型的默认权限不是立即由South创建的,并且在某种程度上只是在推送到数据库时整个迁移链完成.

这比我的情况要好(我现在至少避免例外)但是我仍然需要手动分割围绕创建新模型的迁移,后者迁移可能需要触及权限,因此这不是一个完整的解.

django data-migration django-south

9
推荐指数
1
解决办法
2384
查看次数

用于Java版本的REST模型的好工具

我正在寻找好的工具来支持改变REST服务中使用的模型版本的支持.我的梦想工具会做如下:

  • 我的pojo +版本1.0 config/transformer =>我的模型1.0的服务可用
  • 我的pojo +版本1.1 config/transformer =>服务可用1.1我的模型

在我的特定情况下,我不需要进行反向转换,因为我的REST服务只提供数据查找而从不存储东西,但我不介意使用两种工具:-)

我正在考虑的解决方案是在我的pojo(版本+名称)中添加自定义注释,并根据版本号创建一个基于我的pojo生成JSON/XML的代码生成器.虽然在这里我觉得我正在重新发明轮子.

编辑:以下是可以从版本1到版本1.1进行更改的示例:

版本1:人名字姓

版本1.1人名firstname birthdate

如果您使用版本1.0访问API,则不会获得birthdate属性 - 它仅在1.1版中可用.我想要工具支持使这些服务可用,在那里我可以配置授予我的pojo(目前是1.1版本),我想提供一个不显示这些值的1.0版本.

对模型的其他合法更改可能是删除属性或重命名属性(甚至重命名实体).

编辑2:数字Joel在评论中提到,关于API版本化的讨论,您应该阅读https://stackoverflow.com/posts/9789756/.

版本控制的简单方法是不要进行向后突破的API更改,而是改变业务,因此这并不总是可行的.我的兴趣在于如何使这些变化更容易处理,因此我的问题.

编辑3:我已经找到了可能有助于这个过程的工具,但仍然没有任何能够以良好的方式与休息相关联的工具.这是我到目前为止找到的链接:

java rest data-migration model

9
推荐指数
1
解决办法
2818
查看次数

在数据迁移中访问模型管理器方法

我正在尝试为我的一个应用程序制定数据迁移。我正在使用这里提到的声誉系统 - django-reputation

在我的forward方法中,我有以下代码 -

orm['reputation.reputation'].objects.log_reputation_action(user = user_x, originating_user = user_y, action_value = 10, target_object = sample_obj)
Run Code Online (Sandbox Code Playgroud)

但是在运行迁移时,我收到以下错误 -

AttributeError: 'Manager' object has no attribute 'log_reputation_action'
Run Code Online (Sandbox Code Playgroud)

我已经冻结reputation了数据迁移中的应用程序。请让我知道我在这里做错了什么。

提前致谢。

django data-migration django-south

9
推荐指数
1
解决办法
1946
查看次数

升级/增加 AWS Lightsail 虚拟机的内存以获得更好的性能

我有一个具有以下配置的 AWS Lightsail 虚拟机

  • 512MB内存
  • 1 个虚拟CPU
  • 20GB 固态硬盘
  • 乌班图20.04

主要问题是 RAM 不足以满足我当前的工作并且面临内存不足的问题。

我想将 RAM 增加到至少2GB或更多。

我已经在当前计算机上安装了许多软件和必要的设置。

要点是,我不想经历再次重新安装所有软件并进行设置的痛苦,这根本不是一个容易的过程。我在 MongoDB docker 实例中也有可用的数据。

迁移到具有 2GB RAM、软件+设置和数据的新虚拟机的最佳解决方案是什么?

data-migration virtual-machine amazon-web-services amazon-lightsail

9
推荐指数
2
解决办法
8470
查看次数