我试图在我的rails应用程序中运行一大堆迁移.我怎样才能做到这一点?我不希望在它之前或之后运行任何迁移.谢谢.
我一直在使用SQLITE数据库进行开发,并在POSTGRESQL中生成.我刚用大量数据更新了我的本地数据库,需要将特定的表传输到生产数据库.
基于运行sqlite database .dump > /the/path/to/sqlite-dumpfile.sql,SQLITE以下列格式输出表转储:
BEGIN TRANSACTION;
CREATE TABLE "courses_school" ("id" integer PRIMARY KEY, "department_count" integer NOT NULL DEFAULT 0, "the_id" integer UNIQUE, "school_name" varchar(150), "slug" varchar(50));
INSERT INTO "courses_school" VALUES(1,168,213,'TEST Name A',NULL);
INSERT INTO "courses_school" VALUES(2,0,656,'TEST Name B',NULL);
....
COMMIT;
Run Code Online (Sandbox Code Playgroud)
如何将上述内容转换为可以导入生产服务器的POSTGRESQL兼容转储文件?
我正在使用Rails迁移来管理数据库模式,我正在创建一个简单的表,我希望使用非整数值作为主键(特别是字符串).为了从我的问题中抽象出来,让我们说有一个表格employees,其中员工用字母数字字符串标识,例如"134SNW".
我试过在这样的迁移中创建表:
create_table :employees, {:primary_key => :emp_id} do |t|
t.string :emp_id
t.string :first_name
t.string :last_name
end
Run Code Online (Sandbox Code Playgroud)
这给了我什么似乎完全忽略了这条线t.string :emp_id并继续前进并使它成为一个整数列.有没有其他方法让rails为我生成PRIMARY_KEY约束(我正在使用PostgreSQL),而不必在execute调用中编写SQL ?
注意:我知道最好不要使用字符串列作为主键,所以请不要回答只是说添加一个整数主键.无论如何我可以添加一个,但这个问题仍然有效.
我在rails和Java上使用ruby.我在使用rails项目时非常喜欢使用迁移.所以我想知道是否有像Java工具这样的迁移?如果没有这样的工具,最好使用迁移作为控制Java项目使用的数据库的工具吗?
看起来新的rails版本与self.up和self.down方法有"变化".
那么,当必须回滚迁移时会发生什么,它如何知道要执行的操作.我需要基于在线教程实现以下方法:
class AddImageToUsers < ActiveRecord::Migration
def self.up
add_column :users, :image_file_name, :string
add_column :users, :image_content_type, :string
add_column :users, :image_file_size, :integer
add_column :users, :image_updated_at, :datetime
end
def self.down
remove_column :users, :image_file_name, :string
remove_column :users, :image_content_type, :string
remove_column :users, :image_file_size, :integer
remove_column :users, :image_updated_at, :datetime
end
end
Run Code Online (Sandbox Code Playgroud)
如何使用新的更改方法执行相同的操作?
我在EF5中有一个代码优先的实体模型.但我想手动管理数据库更改 - 我不希望EF修改我现有的数据库及其所有数据.但是当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,告诉我需要先使用代码迁移.我怎么关掉这个?
PHP 8.1 已弃用将null参数传递给许多核心函数。我的主要问题是像htmlspecialchars(php)and 这样的函数trim(php),它null不再默默地转换为空字符串。
为了在不使用大量代码的情况下解决这个问题,我试图重命名原始的内置函数,并将它们替换为将输入转换为null(空)字符串的包装器。
我使用这种方法的主要问题是,该功能rename_function(PECL apd)不再起作用,最后一次更新是从 2004 1开始。
我需要对内置函数进行某种重写,以避免每次调用函数时都编写空检查,从而使我的所有代码变大两倍。
我能想到的唯一其他解决方案是仅使用我的自定义函数,但这仍然需要遍历我拥有的所有代码和第三方库。
在 PHP 8.1 中,当将 null 传递给内置函数时,它不再默默地转换为空字符串。
首先,我创建了我的数据库.
create database mydb;
Run Code Online (Sandbox Code Playgroud)
我在安装的应用程序中添加"南".然后,我转到本教程:http: //south.aeracode.org/docs/tutorial/part1.html
教程告诉我这样做:
$ py manage.py schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
好的,现在我迁移了.
$ py manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误......
django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
所以我使用谷歌(这永远不会奏效,因此问#2我的870度的问题.),我得到这个页面:http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c
好的,所以我按照说明进行操作
>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb
Run Code Online (Sandbox Code Playgroud)
但是当我运行syncdb时,Django会创建一堆表.是的,它创建了south_migrationhistory表,但它也创建了我的应用程序表.
Synced:
> django.contrib.admin
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.sites
> django.contrib.messages
> south
> fable.notification
> …Run Code Online (Sandbox Code Playgroud) 我在迁移中做了这样的事情:
add_column :statuses, :hold_reason, :string rescue puts "column already added"
Run Code Online (Sandbox Code Playgroud)
但事实证明,虽然这适用于SQLite,但它不适用于PostgreSQL.看起来如果add_column爆炸,即使捕获了Exception,事务也已经死了,因此Migration不能做任何额外的工作.
是否有任何非DB特定方法来检查列或表是否已存在?如果做不到的话,有没有办法让我的救援块真正起作用?
migration ×10
database ×3
c ×1
c++ ×1
code-first ×1
deprecated ×1
django ×1
django-south ×1
gold-linker ×1
java ×1
linker ×1
null ×1
php-8.1 ×1
postgresql ×1
primary-key ×1
python ×1
rake ×1
sqlite ×1