2013-03-29 5 views
0

두 개의 테이블 하나가 내 응용 프로그램과 연결된 테이블 invtypesitems 테이블과 연결되어 있지 않습니다.한 테이블에서 다른 테이블로 데이터 복사

invtypes에는 items 표로 이동할 필요가있는 20.000 개의 레코드가 있습니다.

지금 내 첫 번째 시도는 단순히 모든 항목을 얻을 invtypes에 액티브 쿼리를 수행 한 다음 새 Item model 추가 속성을 인스턴스화하고이 또한 그러나 model.save

를 호출하여 새 Item을 각 항목에 가서 만드는 것이 었습니다 유효성 검사를 수행하고 느린 속도로이 작업을 3035 분의 작업으로 수행하는 다른 몇 가지 작업은 Rails Console에서 실행됩니다.이 작업을 몇 번 할 예정이므로 너무 느려질 수는 없습니다.

←[1m←[35m (27.0ms)←[0m INSERT INTO items (typeID, name, description, volume, price, created_at, updated_at) VALUES (0, '#System', '', 0.0, 0.0, '20 
13-03-29 04:06:27 +0100', '2013-03-29 04:06:27 +0100'); 
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2013-03-29 04:06:27 +0100' for column 'created_at' at row 1: INSERT INTO ite 
ms (typeID, name, description, volume, price, created_at, updated_at) VALUES (0, '#System', '', 0.0, 0.0, '2013-03-29 04:06:27 +0100', '2013-03-29 04: 
06:27 +0100'); 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `query' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `block in execute' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in 
`block in log' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrume 
nt' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in 
`log' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `execute' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:214:in `e 
xecute' 
     from (irb):21:in `block in irb_binding' 
     from (irb):19:in `each' 
     from (irb):19 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>' 
     from script/rails:6:in `require' 

인해 Time.now

result = ActiveRecord::Base.connection.select_all("SELECT * FROM invtypes") 
time = Time.now 
result.each do |row| 
sql = "INSERT INTO items (typeID, name, description, volume, price, created_at, updated_at) VALUES (#{row["typeID"]}, '#{row["typeName"]}', '#{row["description"]}', #{row["volume"]}, #{row["basePrice"]}, '#{time}', '#{time}');" 
ActiveRecord::Base.connection.execute(sql) 
end 

에 내가 이것에 대해 갈 수있는 방법이 지금 오류를 제공하지만

그래서 내 두 번째 생각은 어떤 모델 평범한 구식 쿼리 이것을 시도했다 Ruby/Rails를 사용하거나 Java로 앱을 작성해야합니까? 이 쿼리를 실행하려면 C?

만 다음 10 개 행을 실행 발생 :

 from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `query' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `block in execute' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in 
`block in log' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrume 
nt' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in 
`log' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:2 
33:in `execute' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:214:in `e 
xecute' 
     from (irb):7:in `block in irb_binding' 
     from (irb):4:in `each' 
     from (irb):4 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start' 
     from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>' 
     from script/rails:6:in `require' 
     from script/rails:6:in `<main>' 

답변

0

당신이 시도 할 수 : 루프 내에서

time = Time.now.to_formatted_s(:db) 
+0

이 문제는 어떤 이유로 10 개의 레코드를 만든 다음 중지하고 오류를 내 질문의 맨 아래에 추가했습니다. –

+0

오류가 표시되지 않지만 스택 만 표시됩니다. 오류 자체를 포함시킬 수 있습니까? – Arjan

0

SQL 쿼리와 삽입이 느리다. INSERT..SELECT으로 시도하면 해당 명령은 두 번째 명령문에서 선택한 모든 행을 삽입합니다. 어떤 DB를 사용하고 있는지 모르겠지만, 예를 들어 MySQL을 사용한다면 the documentation of the statement을 살펴볼 수 있습니다.

관련 문제