2011-08-22 11 views
12

Come per titolo ho bisogno di importare, ma i backup PG mi sta dando un rigido Postgres SQL che non funziona con MySQL, anche con una codifica non specificata che immagino sia UTF-16. Usando db: pull impiega anni ed errori prima di finire. Apprezzerei qualsiasi suggerimento. Grazie.Come importare un grande database da Heroku a mysql locale o sqlite3?

+0

Ho un problema- simile come ottenere una copia di backup * senza * l'installazione di PG a livello locale. Potresti voler modificare la tua domanda per includerla (come hai fatto in un commento qui sotto). –

risposta

23

Impostare PostgreSQL localmente, utilizzare PG backups per copiare i dati da Heroku sul computer locale, quindi pg_restore per importarlo nel nuovo PostgreSQL locale. Quindi è possibile copiarlo da PostgreSQL a MySQL o SQLite localmente senza doversi preoccupare dei timeout. Oppure, dal momento che avresti una installazione PostgreSQL funzionale dopo, basta iniziare a sviluppare su PostgreSQL in modo che lo stack di sviluppo corrisponda meglio allo stack di distribuzione; sviluppare e distribuire sullo stesso database è una buona idea.

Probabilmente stai scaricando dump binari (ad esempio pg_dump -Fc) da Heroku, che spiegherebbe perché il dump sembra una sorta di assurdità UTF-16.

È possibile utilizzare i pgbackups addon per esportare il dump del database

$ heroku addons:add pgbackups # To install the addon 
$ curl -o latest.dump `heroku pgbackups:url` # To download a dump 
+1

Ciao, grazie, ma installare PG per lo sviluppo è quello che volevo evitare. Può essere utile avere lo stesso DB in dev, ma per la maggior parte dei progetti, non vale la pena, rimango con SQLite3. – aledalgrande

+2

Alla fine ho terminato l'installazione di PG (o è possibile utilizzare quello fornito con Lion). Il processo è stato: * creare un utente PG * ripristinare il dump con pg_restore * installare i ** pg ** e ** rubinetti ** gemme * avviare il server taps su postgres: 'taps server postgres: // root @ localhost/rcp_dev tapsuser tapspassword' * estrai i dati in sqlite3 (lo stesso per mysql): 'taps pull sqlite: //db/development.sqlite3 http: // tapsuser: tapspassword @ localhost: 5000' – aledalgrande

+4

@aledalgrande: Sviluppare su PostgreSQL ne vale assolutamente la pena se si sta distribuendo su Heroku. Tutti i database presentano differenze sottili e non sottili (GROUP BY, distinzione tra maiuscole e minuscole, booleani, disponibilità delle funzioni, tipi di dati, requisiti di trasmissione, troncamento o aumento di un'eccezione, ...) e nessun ORM può proteggerti da tutti. Salvati un po 'di dolore, sviluppa e distribuisci sullo stesso stack. –

22

Heroku ha le istruzioni su come fare questo: https://devcenter.heroku.com/articles/heroku-postgres-import-export#restore-to-local-database, che si riducono a:

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump 

dove myuser è la corrente utente e mydb è il database corrente.

Se si utilizza Postgres.app, è piuttosto banale copiare il database di produzione localmente. È possibile lasciare fuori -U myuser a meno che non si è configurato in caso contrario, e creare un database eseguendo $ psql -h localhost e poi CREATE DATABASE your_database_name; (dal Postgres.app documentation. Quindi eseguire il comando sopra e siete a posto.

4

Seguire questi 4 semplici passi nel terminale
(Heroku Dev Center):

  1. Installare lo strumento di backup Heroku:

    $ heroku addons:add pgbackups 
    
  2. iniziare ad usarlo:

    $ heroku pgbackups:capture 
    
  3. Scarica il db remoto su Heroku (sulla macchina locale) utilizzando ricciolo:

    $ curl -o latest.dump 'heroku pg:backups public-url' 
    
  4. Load it *:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump 
    
    • ottenere il vostro nome utente e scegliere il database desiderato dal tuo file config/database.yml.
    • DATABASE_NAME può essere il vostro sviluppo/test/produzione db (Es. Mydb_development)

Questo è tutto!

UPDATE: E 'aggiornato alla nuova interfaccia

Problemi correlati