Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails迁移和非标准数据类型? 初始问题_Ruby On Rails_Database_Ruby On Rails 3_Rails Migrations - Fatal编程技术网

Ruby on rails Rails迁移和非标准数据类型? 初始问题

Ruby on rails Rails迁移和非标准数据类型? 初始问题,ruby-on-rails,database,ruby-on-rails-3,rails-migrations,Ruby On Rails,Database,Ruby On Rails 3,Rails Migrations,在我的Rails应用程序中,我需要处理来自遗留数据库的数据,并将大量数据作为主键。超出和的4字节整数或整数数据类型限制的数字。但这正是Rails适配器将“integer”转换为的数据类型 我的变通方法 这不是开发中的问题,因为SQLite只有一个接受大数字的整数类型。但是对于暂存/生产(即,用于除SQLite之外的任何东西),我必须手动编辑schema.rb文件,以将t.integer“id”替换为t.column“id”,“BIGINT”。然后加载模式,导入数据,它就可以工作了 解决方法的问题

在我的Rails应用程序中,我需要处理来自遗留数据库的数据,并将大量数据作为主键。超出和的4字节整数或整数数据类型限制的数字。但这正是Rails适配器将“
integer
”转换为的数据类型

我的变通方法 这不是开发中的问题,因为SQLite只有一个接受大数字的整数类型。但是对于暂存/生产(即,用于除SQLite之外的任何东西),我必须手动编辑
schema.rb
文件,以将
t.integer“id”
替换为
t.column“id”,“BIGINT”
。然后加载模式,导入数据,它就可以工作了

解决方法的问题 现在,每次我运行Rails迁移对数据库模式进行一个小的更改时,整个
schema.rb
文件都会自动重新生成,并且我所有的
id
列都只是
t.integer
。和以前一样,这在开发(SQLite)中不是问题,但它可能会在生产中出现,不是吗?我讨厌每次需要添加或重命名列时都必须删除数据库、加载模式并重新导入所有数据——我更愿意为此使用迁移

到目前为止,我的解决方法是在迁移之前备份
schema.rb
,然后将迁移添加的内容与我自己的内容合并。有谁有更好的主意吗?

一个破解mysql2和postgresql中bigint主键的解决方案:

在environment.rb中:

    # Load the rails application
require File.expand_path('../application', __FILE__)

require 'active_record/connection_adapters/mysql2_adapter'
require 'active_record/connection_adapters/postgresql_adapter'

ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:big_primary_key] = "BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY".freeze
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:big_primary_key] = "bigserial primary key".freeze

# Initialize the rails application
YourAppName::Application.initialize!
破解mysql2和postgresql中bigint主键的解决方案:

在environment.rb中:

    # Load the rails application
require File.expand_path('../application', __FILE__)

require 'active_record/connection_adapters/mysql2_adapter'
require 'active_record/connection_adapters/postgresql_adapter'

ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:big_primary_key] = "BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY".freeze
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:big_primary_key] = "bigserial primary key".freeze

# Initialize the rails application
YourAppName::Application.initialize!

我知道我不应该编辑
schema.rb
,但我找不到一个好的替代方案,这就是我提出这个问题的原因之一。类似:[在迁移中指定自定义主键][1]。你能用文本代替BIGINT吗?[1] :我知道我不应该编辑
schema.rb
,但我找不到一个好的替代方案,这是我问这个问题的原因之一。类似:[在迁移中指定自定义主键][1]。你能用文本代替BIGINT吗?[1] :非常感谢,我一定会试试这个!非常感谢,我一定会试试这个!