복사

2014-04-30 2 views
2

나는 3 데이터베이스가 각각은 database.yml복사

으로 정의됩니다. A (mynewapp_psql) 내 새 애플 리케이션을위한 데이터베이스로. 이 응용 프로그램에서 나는 두 개의 이전 데이터베이스에서 선택한 자료를 복사 할 수 있기를 원합니다. 그것은 내 기존 데이터베이스에서 각 제품을 새로운 데이터베이스에 새 상당을 만들어야합니다

old_db = ActiveRecord::Base.establish_connection(:database => 'old_blogposts_mysql'... etc) 
posts = old_db.connection.execute("select * from posts'") 
posts.each do |p| 
    NewPost.create(:name => p.name.downcase) #NewPost should add Post in A. (mynewapp_psql) 
end 

(응답에 따라 업데이트)

내 시도.

콘솔을 통해 작업하는 것이 좋으며 데이터를 필터링하고 변경해야하므로 데이터베이스를 그대로 복사 할 수 없습니다.

답변

1

따라서 분실 연결 중 하나입니다. 코드가 이렇게되도록 현재 DB에 새로운 연결을 설정하십시오.

old_db = ActiveRecord::Base.establish_connection(:database => 'old_blogposts_mysql'... etc) 
posts = old_db.connection.execute("select * from posts'") 
new_db = ActiveRecord::Base.establish_connection(:database => 'mynewapp_psql'... etc) 
posts.each do |p| 
    NewPost.create(:name => p.name.downcase) #NewPost should add Post in A. (mynewapp_psql) 
end 
1

콘솔이 데이터베이스에 동적으로 액세스하는 유일한 방법은 아닙니다. 각 데이터베이스에 대해 ActiveRecord 연결을 사용하여 사용자 지정 루비 작업을 생각해보십시오.

require 'pg' 
require 'active_record' 

ActiveRecord::Base.establish_connection(
    adapter: 'postgresql', # or 'mysql2' or 'sqlite3' 
    host:  'localhost', 
    database: 'canvas_test', 
    username: 'joe', 
    password: 'shiitake' 
) 

# EXEC raw SQL 
ActiveRecord::Base.connection.execute("SELECT * FROM posts;") 

class Post < ActiveRecord::Base 
end 

# READ all posts 
puts Post.count 
=> #<Post:0xb96582cc> 
=> ... 

# CREATE one new post 
my_post = Post.new 
+0

감사합니다. 그러나 이것은 다른 데이터베이스에 연결하지 않을 것입니까? 내 마지막 행인 "my_post = Post.new"는 canvas_test 데이터베이스 (생성하는 원래 mynewapp_psql 데이터베이스가 아닌)에 새 Post를 생성하는 것이 아닌가? – Christoffer

+0

result = ActiveRecord :: Base.connection.execute ("SELECT * FROM posts;") - 이것이 내가 필요한 유일한 것 같아요. 그런 다음 결과 (예 : result.first)를 사용하여 데이터를 가져올 수 있습니다. 다시 한 번 감사드립니다! – Christoffer

+0

여러 의견을 죄송합니다. 나는이 문제를 실제로 해결하지 못한다는 것을 깨달았다. 왜냐하면 내가 mysql 데이터베이스에 연결을 설정하면 더 이상 콘솔에서 내 데이터베이스에 액세스 할 수 없기 때문이다. – Christoffer