2014-04-15 13 views
24

Tôi có cơ sở dữ liệu heroku, d76mj7ltuqs.Postgres sao chép DB sản xuất Heroku sang phát triển địa phương DB

Sau đó tôi có cơ sở dữ liệu cục bộ, test_development.

Giản đồ giống nhau trên cả hai cơ sở dữ liệu này - tôi muốn lấy tất cả dữ liệu từ cơ sở dữ liệu sản xuất của mình và ghi đè lên cơ sở dữ liệu cục bộ của mình.

Tôi có thể làm điều đó như thế nào trong Postgres?

+0

lẽ [ 'pg_dump'] (http://www.postgresql.org/docs/current/static/app-pgdump.html) và ['pg_restore'] (http://www.postgresql.org/docs/current/static/app-pgrestore.html)? –

Trả lời

1

Sử dụng thiết bị đầu cuối của bạn để tạo một địa phương pg_dump và sau đó là psql hoặc pg_restore nó vào cơ sở dữ liệu cục bộ của bạn.

Phương pháp tương tự có thể được tìm thấy here.

3

đây là cách tôi làm điều đó, hãy chắc chắn gzip nó khi cơ sở dữ liệu của bạn phát triển. cũng không xuất ACL vì bạn có thể không có cùng người dùng postgres trên heroku và tài khoản cục bộ. thay thế bằng chi tiết cụ thể của bạn.

pg_dump -h ec2-##-##-##-##.compute-1.amazonaws.com -p <port> -Fc --no-acl --no-owner -o -U <username> <databasename> | gzip > dumpfile.gz 
#<Prompt for Password> 
gunzip -c dumpfile.gz | pg_restore --verbose --clean --no-acl --no-owner -d test_development -U <local_username> 
+2

'pg_dump' có thể nén kết xuất mà không có' gzip' bên ngoài. Nhìn vào tùy chọn '--compress = 0..9'. –

46

Sử dụng Heroku của "pg: kéo":

Bạn sẽ cần phải xóa DB địa phương của bạn:

rake db:drop 

Các thu thập một số thông tin từ Heroku:

heroku pg:pull DATABASE_URL test_development 

Điều này sẽ kết nối với DB Heroku và sao chép nó vào cơ sở dữ liệu cục bộ.

Xem Heroku's documentation on pg:pull để biết thêm chi tiết.

+2

Không chắc chắn nếu đây là một điều mới bây giờ, nhưng khi xác định một ứng dụng bạn cần phải đặt trong '--app' trước tên ứng dụng. – jdpipkin

+0

Tương tự tại đây. Tôi cần: 'heroku pg: kéo DATABASE_URL database_local_name --app myapp' – J0ANMM

0

Nếu đây là ứng dụng Rails, bạn có thể sử dụng tập lệnh sau để ghi đè lên cơ sở dữ liệu cục bộ của mình với bản mới nhất bạn đã tạo trên Heroku. Nếu bạn bỏ ghi chú dòng với heroku pg:backups capture, tập lệnh sẽ tạo ảnh chụp nhanh mới trên Heroku trước khi tải xuống máy của bạn.

Lưu ý rằng bạn không cần phải chỉnh sửa tập lệnh vì nó đọc tất cả cấu hình từ tệp database.yml của bạn.

#!/usr/bin/env ruby 

require_relative '../config/environment' 

# Uncomment the line below if you want to generate a new snapshot of the 
# Heroku production database before downloading it to the local machine 
# `heroku pg:backups capture` 

database_dump_file_pathname = Tempfile.new('latest.dump').path 
`heroku pg:backups:download --output #{database_dump_file_pathname}` 

# Get database config fom database.yml file 
database_config = YAML::load_file(Rails.root.join('config', 'database.yml')) 
database_name = database_config['development']['database'] 
database_username = database_config['development']['username'] 
database_password = database_config['development']['password'] 

# Overwrite local database with dump 
cmd_line_arguments = [ 
    '--verbose', 
    '--clean', 
    '--no-acl', 
    '--no-owner', 
    '--host localhost', 
    "-U #{database_username}", 
    "-d #{database_name}", 
    database_dump_file_pathname 
].join(' ') 
`PGPASSWORD=#{database_password} pg_restore #{cmd_line_arguments}` 

Xem chi tiết Heroku docs on downloading DB backups.

1

làm sạch cơ sở dữ liệu địa phương của bạn:

rake db:schema:load 

đổ cơ sở dữ liệu Heroku của bạn:

heroku pg:backups:capture -r <**your production git repo name**> 
heroku pg:backups:download -r <**your production git repo name**> 

tải dữ liệu trong cơ sở dữ liệu địa phương của bạn

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d <**test database name**> latest.dump 
Các vấn đề liên quan