标签: database-migration

Ruby on Rails:如何使用rake db:migrate恢复迁移?

安装设备后,我得到了这个.

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,如果我执行rake db:migrate,将创建users表.

如何恢复此迁移,即如何再次使用rake删除users表?

migration rake ruby-on-rails database-migration ruby-on-rails-3.1

90
推荐指数
7
解决办法
8万
查看次数

如何将SQL Server数据库导出到MySQL?

我正在尝试从SQL Server数据库备份文件(.bak)转换为MySQL.这个问题和答案非常有用,我已经成功导入了数据库,但现在我仍然坚持导出到MySQL.

建议使用MySQL Migration Toolkit,但似乎已被MySQL Workbench取代.是否可以使用MySQL Workbench以与迁移工具相同的方式从SQL Server迁移?

或者迁移工具包是否仍可在某处使用?

mysql sql-server database-migration

81
推荐指数
7
解决办法
27万
查看次数

如果仅添加新表,则会进行会议室数据库迁移

不要假设,我有一个简单的房间数据库:

@Database(entities = {User.class}, version = 1)
abstract class AppDatabase extends RoomDatabase {
    public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在添加一个新实体:Pet并将版本提升为2:

@Database(entities = {User.class, Pet.class}, version = 2)
abstract class AppDatabase extends RoomDatabase {
    public abstract Dao getDao();
}
Run Code Online (Sandbox Code Playgroud)

当然,Room会抛出异常: java.lang.IllegalStateException: A migration from 1 to 2 is necessary.

假设,我没有更改User类(因此所有数据都是安全的),我必须提供只创建新表的迁移.所以,我正在调查Room生成的类,搜索生成的查询以创建我的新表,复制它并粘贴到迁移中:

final Migration MIGRATION_1_2 =
        new Migration(1, 2) {
            @Override
            public void migrate(@NonNull final SupportSQLiteDatabase database) {
                database.execSQL("CREATE TABLE IF NOT EXISTS `Pet` (`name` TEXT NOT NULL, PRIMARY KEY(`name`))"); …
Run Code Online (Sandbox Code Playgroud)

java android database-migration android-room

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

使用外键Laravel错误删除列:常规错误:1025重命名时出错

我使用这样的迁移创建了一个表:

public function up()
{
    Schema::create('despatch_discrepancies',  function($table) {
        $table->increments('id')->unsigned();
        $table->integer('pick_id')->unsigned();
        $table->foreign('pick_id')->references('id')->on('picks');
        $table->integer('pick_detail_id')->unsigned();
        $table->foreign('pick_detail_id')->references('id')->on('pick_details');
        $table->integer('original_qty')->unsigned();
        $table->integer('shipped_qty')->unsigned();
    });
}

public function down()
{
    Schema::drop('despatch_discrepancies');
}
Run Code Online (Sandbox Code Playgroud)

我需要更改此表并删除外键引用和列,pick_detail_id并添加一个名为skuafter pick_idcolumn 的新varchar 列.

所以,我创建了另一个迁移,看起来像这样:

public function up()
{
    Schema::table('despatch_discrepancies', function($table)
    {
        $table->dropForeign('pick_detail_id');
        $table->dropColumn('pick_detail_id');
        $table->string('sku', 20)->after('pick_id');
    });
}

public function down()
{
    Schema::table('despatch_discrepancies', function($table)
    {
        $table->integer('pick_detail_id')->unsigned();
        $table->foreign('pick_detail_id')->references('id')->on('pick_details');
        $table->dropColumn('sku');
    });
}
Run Code Online (Sandbox Code Playgroud)

当我运行此迁移时,我收到以下错误:

[Illuminate\Database\QueryException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)(SQL:alter table despatch_discrepancies删除外键pick_detail_id)

[PDOException]
SQLSTATE [HY000]:一般错误:1025将'./dev_iwms_reboot/despatch_discrepancies'重命名为'./dev_iwms_reboot/#sql2-67c-17c464'时出错(错误号:152)

当我尝试通过运行php artisan migrate:rollback命令来反转此迁移时,我收到一条Rolled back消息,但它实际上并没有在数据库中执行任何操作.

知道什么可能是错的吗?如何删除具有外键引用的列?

php database-migration laravel laravel-4

69
推荐指数
7
解决办法
6万
查看次数

EF迁移显示空的Up()Down()方法

我有一个当前的第二个版本的本地数据库,现在应该转到它的第三个版本.

以前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了.

在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射.

所以现在我以与之前的类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令.

幸运的是,我获得了一个空迁移Up()和Down()方法.

当我查看数据库时,有一个__migrationHistory可用于前两次迁移.如果我现在运行我的应用程序,也会添加第三个迁移,但显然没有创建新表,因为它不在Up()方法中.

我能做错什么?

我认为在搭建以前的迁移时会出现问题......就像它找不到我添加的新的Code-First类一样.

这是我的命令:

add-migration "1.2" -verbose -ProjectName "MyEFproject"
Run Code Online (Sandbox Code Playgroud)

我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都只是在项目中?

添加迁移的结果:

namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;

public partial class _1002 : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}
}
Run Code Online (Sandbox Code Playgroud)

新模型类的示例:

using System;
using System.Collections.Generic;

namespace MyProject.Models
{
public partial class MyTable
{

    public string SomeId { get; set; }
    public string SomeText { get; set; }


}
}
Run Code Online (Sandbox Code Playgroud)

新Mapping类的示例

using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace MyProject.Models.Mapping …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework database-migration

50
推荐指数
6
解决办法
3万
查看次数

django.db.migrations.exceptions.InconsistentMigrationHistory

当我跑

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

在我的django项目中,我收到以下错误

Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site-     packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
Run Code Online (Sandbox Code Playgroud)

我有一个像下面这样的用户模型

class User(AbstractUser):
place …
Run Code Online (Sandbox Code Playgroud)

python django database-migration django-models django-rest-framework

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

在应用程序配置文件中找不到名为"MyApplicationEntities"的连接字符串

我只是安装EF 4.3并试图通过迁移升级我的项目.但是我遇到了尝试add-migration initial通过Package Manager控制台执行我的项目的问题.

它现在抛出任何异常 No connection string named 'MyApplicationEntities' could be found in the application config file.

现在我的配置拥有一切

<connectionStrings>
<add name="MyApplicationEntities" 
     connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost;initial catalog=MyApplicationEntitiesDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题是EF 4.3中的一个错误或者我做得不对.

我认为这篇文章解决了这个问题但并不完全.

任何人都有答案.

感谢Sanj.

connection-string database-migration entity-framework-4.3

45
推荐指数
5
解决办法
6万
查看次数

EF迁移数据库优先方法?

我们正在使用Database First方法和EntityFramework.我们有几个客户,当我们部署新产品版本时,我们现在正在使用类似的工具"手动"应用数据库架构更改SQL Compare.

有没有一种方法可以帮助EF Migrations自动将更改应用于客户数据库?

c# entity-framework database-migration

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

将mongodb数据库从localhost迁移到远程服务器

我在我的本地ubuntu机器上创建了一个数据库.

如何将其传输到我的远程服务器(ec2 Ubuntu)

database-migration mongodb nosql

41
推荐指数
3
解决办法
5万
查看次数

Laravel:生产数据的迁移和种子

我的应用程序需要预先注册的数据集才能工作.所以我需要在设置应用程序时将它们插入数据库中.

Laravel提出了两种机制:

  • 数据库迁移:"它们允许团队修改数据库模式并在当前模式状态下保持最新."
  • 数据库播种:"Laravel还包括一种使用种子类为测试数据播种数据库的简单方法."

当我读到这个描述时,这些解决方案似乎都没有适应.

在stackoverflow上已经提出了类似的问题并回答了问题.答案建议使用数据库播种器通过检测当前环境来填充数据库:

<?php

class DatabaseSeeder extends Seeder {

    public function run()
    {
            Eloquent::unguard();

            if (App::environment() === 'production')
            {
                $this->call('ProductionSeeder');
            }
            else
            {
                $this->call('StagingSeeder');
            }
    }

}
Run Code Online (Sandbox Code Playgroud)

当然,这个解决方案有效.但我不确定这是否是正确的方法,因为通过使用播种机插入数据,您将失去迁移机制提供的所有优势(数据库升级,回滚......)

我想知道在这种情况下最佳做法是什么.

php database database-migration laravel laravel-4

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