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?
Odpowiedz
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
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
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
@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. –
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.
Śledź tych 4 prostych kroków w terminalu
(Heroku Dev Center):
Zainstaluj narzędzie Kopia zapasowa Heroku:
$ heroku addons:add pgbackups
zacząć go używać:
$ heroku pgbackups:capture
pobierania zdalnego db na Heroku (na lokalnym komputerze) za pomocą curl:
$ curl -o latest.dump 'heroku pg:backups public-url'
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
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). –