2011-08-22 10 views
12

Jak na tytuł muszę zaimportować, ale kopie PG dają mi surowy Postgres SQL, który nie działa z MySQL, także z nieokreślonym kodowaniem, które jak sądzę jest UTF-16. Używanie db: pull trwa wieki i błędy przed zakończeniem. Byłbym wdzięczny za wszelkie sugestie. Dzięki.Jak zaimportować dużą bazę danych z Heroku do lokalnego mysql lub sqlite3?

+0

Mam podobny issue- jak dostać kopię zapasową * * bez instalowania PG lokalnie. Możesz edytować swoje pytanie, aby je uwzględnić (tak jak w komentarzu poniżej). –

Odpowiedz

23

Skonfiguruj PostgreSQL lokalnie, użyj PG backups, aby skopiować dane z Heroku na lokalny komputer, a następnie pg_restore, aby zaimportować go do nowego lokalnego PostgreSQL. Następnie możesz skopiować go z PostgreSQL do MySQL lub SQLite lokalnie, nie martwiąc się o limity czasu. Lub, skoro później będziesz miał funkcjonalną instalację PostgreSQL, zacznij rozwijać się na bazie PostgreSQL, aby twój stos programistyczny lepiej pasował do stosu; rozwijanie i wdrażanie na tej samej bazie danych jest dobrym pomysłem.

Prawdopodobnie otrzymujesz zrzuty binarne (to jest pg_dump -Fc) z Heroku, co wyjaśniałoby, dlaczego zrzut wygląda jak bzdury UTF-16.

Można użyć pgbackups addon wyeksportować zrzutu bazy danych

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

Cześć mu, dziękuję, ale instalowanie PG do opracowania jest tym, czego chciałem uniknąć. Może być użyteczne posiadanie tego samego DB w dev, ale dla większości projektów, to po prostu nie warto, trzymałbym się z SQLite3. – aledalgrande

+2

W końcu skończyłem instalowanie PG (lub możesz użyć tego dostarczonego z Lwem). Proces był następujący: * Stwórz użytkownika PG * przywróć zrzut za pomocą pg_restore * zainstaluj ** pg ** i ** stuknij ** klejnoty * uruchom serwer kranów na postgresie: 'taps server postgres: // root @ localhost/rcp_dev tapspróbtowe hasło :: * Wyciągnij dane do sqlite3 (to samo dla mysql): 'taps pull sqlite: //db/development.sqlite3 http: // tapsuser: tapspassword @ localhost: 5000' – aledalgrande

+4

@aledalgrande: Rozwój na PostgreSQL jest absolutnie wart tego, jeśli wdrażasz Heroku. Wszystkie bazy danych mają subtelne i niezbyt subtelne różnice (GROUP BY, rozróżnianie wielkości liter, wartości logiczne, dostępność funkcji, typy danych, wymagania dotyczące rzutowania, skracanie lub zgłaszanie wyjątku, ...) i żadna metoda ORM nie chroni przed nimi wszystkimi. Oszczędź sobie żalu, rozwiniesz i rozmieścisz na tym samym stosie. –

22

Heroku ma instrukcje jak to zrobić: https://devcenter.heroku.com/articles/heroku-postgres-import-export#restore-to-local-database, które sprowadzają się do:

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

gdzie myuser jest obecny użytkownik i mydb jest bieżącą bazą danych.

Jeśli używasz Postgres.app, kopiowanie bazy danych produkcji lokalnie jest dość trywialne. Można pominąć -U myuser chyba że skonfigurowano go inaczej, i utworzyć bazę danych, uruchamiając $ psql -h localhost a następnie CREATE DATABASE your_database_name; (od Postgres.app documentation. Następnie należy uruchomić powyższą komendę i jesteś ustawiony.

4

Śledź tych 4 prostych kroków w terminalu
(Heroku Dev Center):

  1. Zainstaluj narzędzie Kopia zapasowa Heroku:

    $ heroku addons:add pgbackups 
    
  2. zacząć go używać:

    $ heroku pgbackups:capture 
    
  3. pobierania zdalnego db na Heroku (na lokalnym komputerze) za pomocą curl:

    $ curl -o latest.dump 'heroku pg:backups public-url' 
    
  4. załadować go *:

    $ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U YOUR_USERNAME -d DATABASE_NAME latest.dump 
    
    • dostać swoją nazwę użytkownika i wybrać żądana baza danych z pliku config/database.yml.
    • DATABASE_NAME może być twój rozwój/test/produkcja db (Ex. Mydb_development)

To jest to!

UPDATE: To jest aktualizowany do nowego interfejsu

Powiązane problemy