我试着跑:
rake db:migrate VERSION=0
Run Code Online (Sandbox Code Playgroud)
它还原除了最后一个之外的所有迁移.
然后我试着跑:
rake db:migrate:down VERSION=<timestamp_of_last_migration>
Run Code Online (Sandbox Code Playgroud)
但它也没有恢复.为什么?
是否有一个命令可以同时运行所有down方法?
migration rake ruby-on-rails database-migration ruby-on-rails-3
想知道是否有人有任何见解或推荐的工具从PostgreSQL数据库导出记录并将它们导入MySQL数据库.我相信表结构是100%相同的.
思考?谢谢!
我们有一个现有的生产数据库.我们决定使用liquibase进行所有进一步更新并创建任何新数据库(如开发或集成).
我们已经基于现有的生产模式创建了liquibase脚本(以创建任何新的数据库,如开发,集成等).在该脚本之上,我们还添加了两个更新.展望生产数据库的所有进一步更新将由liquibase完成.
如果我们在生产中执行liquibase,它将尝试完成所有已经存在的完整更改,这不应该发生,因为生产已经拥有除了两个新更新之外的所有内容.现在我们想使用liquibase将这两个更改单独更新为制作.
我们怎么做到这一点?
我这样做是为了unique在表格中创建我的电子邮件字段.
$table->unique('email');
我试过了
public function up()
{
Schema::table('contacts', function(Blueprint $table)
{
$table->dropUnique('email');
});
}
Run Code Online (Sandbox Code Playgroud)
然后,当我运行php artisan migrate时,我得到了这个

它告诉我它不在那里,但我百分百肯定它就在那里.

如何编写迁移以撤消该操作?
我有一个名为"foocore"的django核心应用程序.
有几个可选的类似插件的应用程序.例如"superfoo".
在我的例子中,每个插件都在CharField模型中添加了一个新选项,该模型属于"foocore".
如果选择列表发生更改,Django迁移会检测更改.
我认为这不是必要的.至少有一位其他开发者认为相同:
https://code.djangoproject.com/ticket/22837
class ActivePlugin(models.Model):
plugin_name = models.CharField(max_length=32, choices=get_active_plugins())
Run Code Online (Sandbox Code Playgroud)
获取选择的代码:
class get_active_plugins(object):
def __iter__(self):
for item in ....:
yield item
Run Code Online (Sandbox Code Playgroud)
核心"foocore"在几个项目中使用,每个安装都有一组不同的插件.Django试图创建无用的迁移....
有办法解决这个问题吗?
我试图运行yii migrate,但它显示以下错误:
create table news-cate ...Exception: SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key
The SQL being executed was: CREATE TABLE `news-cate` (
`news-id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`cate-id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
class m150821_083020_create_newscate_table extends Migration
{
public function safeUp()
{
$this->createTable('news-cate', [
'news-id' => $this->primaryKey(),
'cate-id' => $this->primaryKey(),
]);
$this->addForeignKey("fk_news_cate_nid", "news-cate", "news-id", "news", "id", …Run Code Online (Sandbox Code Playgroud) 我需要将我的一个Django模型中的字段类型更改CharField为ForeignKey.这些字段已经填充了数据,所以我想知道这样做的最佳或正确方法是什么.我可以只更新字段类型并进行迁移,还是有任何可能的"陷阱"需要注意?注意:我只使用vanilla Django管理操作(makemigrations和migrate),而不是南方.
试着按照Django项目的教程.
我遇到的问题是执行命令时:
python manage.py sql polls我收到错误:
CommandError:App'polls'具有迁移功能.只有sqlmigrate和sqlflush命令可以在应用程序进行迁移时使用
到目前为止,我似乎无法在互联网或本网站上找到任何指南来解决该计划.
在我的应用程序中,每个用户都有自己的数据库,用户注册后创建.连接和数据库数据(数据库名称,用户名,密码)保存在默认数据库的表中.
try{
DB::transaction(function() {
$website = new Website();
$website->user_id = Auth::get()->id;
$website->save();
$database_name = 'website_'.$website->id;
DB::statement(DB::raw('CREATE DATABASE ' . $database_name));
$websiteDatabase = new WebsiteDatabase();
$websiteDatabase->website_id = $website->id;
$websiteDatabase->database_name = $database_name;
$websiteDatabase->save();
});
} catch(\Exception $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
现在我想在新用户的数据库创建后运行一些迁移.
可能吗?
谢谢
我想写一个数据迁移,我在这里以较小的批量修改一个大表中的所有行,以避免锁定问题.但是,我无法弄清楚如何在Django迁移中手动提交.每次我试着跑,commit我得到:
TransactionManagementError:当'atomic'块处于活动状态时禁止使用.
AFAICT,数据库模式编辑器总是在原子块中包装Postgres迁移.
是否有一种明智的方法可以在迁移过程中突破交易?
我的迁移看起来像这样:
def modify_data(apps, schema_editor):
counter = 0
BigData = apps.get_model("app", "BigData")
for row in BigData.objects.iterator():
# Modify row [...]
row.save()
# Commit every 1000 rows
counter += 1
if counter % 1000 == 0:
transaction.commit()
transaction.commit()
class Migration(migrations.Migration):
operations = [
migrations.RunPython(modify_data),
]
Run Code Online (Sandbox Code Playgroud)
我正在使用Django 1.7和Postgres 9.3.这曾经用于南方和旧版本的Django.