好的,所以这似乎是一个非常愚蠢的问题,而且我确定我在某处遗漏了某些东西.
你如何在Django上使用South进行向后迁移?
所以我已经调整了我的模型,创建了一个迁移schemamigration,运行迁移migrate,现在我意识到这不是我想要的,我想要它回到以前的方式.
如果没有手动编辑数据库表并删除迁移文件,我应该如何进行迁移?我发现使用South通过谷歌进行向后迁移的参考,但还没有找到一个可靠的代码示例.
有人可以帮忙吗?
我在之前的迁移中创建了一个日期列,并将其设置为可为空.现在我想把它改成不可空.假设该数据库中有空行,我该怎么做呢?如果它们当前为空,我可以将这些列设置为Time.now.
我正在尝试在Laravel中创建外键但是当我使用artisani 迁移我的表时抛出以下错误:
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
: alter table `priorities` add constraint priorities_user_id_foreign foreign
key (`user_id`) references `users` (`id`))
Run Code Online (Sandbox Code Playgroud)
我的迁移代码如下:
优先级迁移文件
public function up()
{
//
Schema::create('priorities', function($table) {
$table->increments('id', true);
$table->integer('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->string('priority_name');
$table->smallInteger('rank');
$table->text('class');
$table->timestamps('timecreated');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::drop('priorities');
}
Run Code Online (Sandbox Code Playgroud)
用户迁移文件
public function up()
{
//
Schema::table('users', function($table)
{
$table->create();
$table->increments('id');
$table->string('email');
$table->string('first_name');
$table->string('password');
$table->string('email_code'); …Run Code Online (Sandbox Code Playgroud) 这里非常简单的问题 - 如果迁移变得缓慢而繁琐,因为应用程序变得更加复杂,如果我们有更清洁rake db:schema:load的调用,为什么迁移根本存在呢?
如果上面的答案是迁移用于版本控制(数据库更改的逐步记录),那么当应用程序变得更复杂并且rake db:schema:load更多地使用时,它们是否继续维护其主要功能?
从这个问题的答案:rake db:schema:load 将删除生产服务器上的数据,因此在使用它时要小心.
如果我创建一个新的rails 3迁移(例如)
rails g migration tester title:tester user:references
Run Code Online (Sandbox Code Playgroud)
,一切正常......但是,如果我添加一个包含以下内容的列:
rails g migration add_user_to_tester user:references
Run Code Online (Sandbox Code Playgroud)
参考字段无法识别.简而言之,问题是:如何从命令行向rails迁移添加引用列?
我在C#中使用EF 6.0进行手动迁移和更新.我在数据库上有大约5次迁移,但我意识到上次迁移很糟糕,我不想要它.我知道我可以回滚到先前的迁移,但是当我添加新的(固定的)迁移并运行Update-Database时,即使应用了错误的迁移.
我试图回滚到上一次迁移并删除迁移错误的文件.但是,当我尝试添加新的迁移时,我在更新数据库时遇到错误,因为迁移文件已损坏(更具体地说,第一行代码将表A重命名为B并且是下一行,EF正在尝试更新表名字A - 也许是一些EF错误).
是否有一些我可以运行的查询,这会告诉EF类似于"忘记上次迁移,就像它从未存在过,这很糟糕"?像删除迁移这样的东西.
Edit1
我找到了适合我的解决方案.将模型更改为良好状态并运行Add-Migration TheBadMigration -Force.这将重新构建最后的,而不是应用的迁移.
无论如何,这仍然没有完全回答原来的问题.如果我将UpdateDatabase更改为错误的迁移,我没有找到如何回滚和创建新迁移的好方法,不包括坏迁移.
谢谢
我在这里看到了一些关于向现有列添加默认布尔值的问题(即这一个).所以我尝试了这个change_column建议,但我一定不能做得对.
我试过了:
$ change_column :profiles, :show_attribute, :boolean, :default => true
Run Code Online (Sandbox Code Playgroud)
哪个回报 -bash: change_column: command not found
然后我跑了:
$ rails g change_column :profiles, :show_attribute, :boolean, :default => true
Run Code Online (Sandbox Code Playgroud)
...和
$ rails change_column :profiles, :show_attribute, :boolean, :default => true
Run Code Online (Sandbox Code Playgroud)
然后跑了rake db:migrate,但价值:show_attribute仍然存在nil.在我上面提到的问题中,它在PostgreSQL中说你需要手动更新它.由于我正在使用PostgreSQL,因此我在create_profiles迁移中添加了以下内容:
t.boolean :show_attribute, :default => true
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里我做错了什么?
跟踪和/或自动化数据库架构更改的最佳方法是什么?我们的团队使用Subversion进行版本控制,我们已经能够以这种方式自动完成一些任务(将构建推送到临时服务器,将经过测试的代码部署到生产服务器),但我们仍在手动执行数据库更新.我想找到或创建一个解决方案,使我们能够跨不同环境的服务器高效工作,同时继续使用Subversion作为后端,通过该后端将代码和数据库更新推送到各种服务器.
许多流行的软件包都包含自动更新脚本,可以检测数据库版本并应用必要的更改.这是否是即使在更大规模(跨多个项目,有时还有多种环境和语言)中实现这一目标的最佳方式?如果是这样,是否有任何现有的代码可以简化流程,或者最好只是推出我们自己的解决方案?有没有人之前实现过类似的东西并将它集成到Subversion post-commit钩子中,或者这是一个坏主意?
虽然支持多个平台的解决方案更可取,但我们肯定需要支持Linux/Apache/MySQL/PHP堆栈,因为我们的大多数工作都在该平台上.
我正在使用JSF 1.2编写的一个相当大的应用程序.JSF 1.2现在已经有6年了.我需要升级到JSF 2.0.这会有多痛苦?我注意到自定义标签中的一些属性已被更改等.