2014-04-15 10 views
24

Ho un database heroku, d76mj7ltuqs.Postgres copia il DB di produzione di Heroku nello sviluppo locale DB

Ho quindi un database locale, test_development.

Lo schema è lo stesso su entrambi questi database: voglio estrarre tutti i dati dal mio database di produzione e sovrascrivere il mio database locale, in modo che local sia una replica esatta della produzione al momento del pull.

Come posso farlo in Postgres?

+0

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

risposta

1

Utilizzare il terminale per creare un valore locale pg_dump e quindi psql o pg_restore nel database locale.

Metodo simile può essere trovato here.

3

questo è come lo faccio, assicurati di gzip come cresce il tuo database. inoltre non esportare l'ACL poiché probabilmente non hai lo stesso utente postgres su heroku e account locali. sostituire con i tuoi dettagli specifici.

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

Il 'pg_dump' può comprimere il dump senza' gzip' esterno. Guarda l'opzione '--compress = 0..9'. –

46

Utilizzo di Heroku "pg: pull":

Avrai bisogno di cancellare il DB locale:

rake db:drop 

L'raccogliere alcune informazioni da Heroku:

heroku pg:pull DATABASE_URL test_development 

Questo si collegherà al DB heroku e lo copierà nel database locale.

Vedere Heroku's documentation on pg:pull per ulteriori dettagli.

+2

Non sono sicuro che questa sia una novità, ma quando definisci un'app devi inserire '--app' prima del nome dell'app. – jdpipkin

+0

Lo stesso qui. Ho bisogno di: 'heroku pg: pull DATABASE_URL database_local_name --app myapp' – J0ANMM

0

Se si tratta di un'app Rails, è possibile utilizzare il seguente script per sovrascrivere il database locale con l'ultimo dump generato su Heroku. Se si decommenta la riga con heroku pg:backups capture, lo script genererà una nuova istantanea su Heroku prima di scaricarla sul proprio computer.

Nota che non è necessario modificare lo script poiché legge tutta la configurazione dal file database.yml.

#!/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}` 

Vedere il Heroku docs on downloading DB backups per dettagli.

1

pulire il database locale:

rake db:schema:load 

uscire il vostro database di Heroku:

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

dati di carico nel vostro database locale

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d <**test database name**> latest.dump 
Problemi correlati