Как я могу получить дамп базы данных postgres с открытым текстом на герою?
Из-за несовместимости версии моей базы данных postgres на heroku (9.1) и моей локальной установки (8.4) мне нужен файл дампа базы данных с открытым текстом sql, поэтому я могу поместить копию своих производственных данных в локальную тестовую среду.
Кажется, на геройку я не могу сделать дамп, используя pg_dump, но могу вместо этого сделать это:
$ heroku pgbackups:capture
$ curl -o my_dump_file.dump `heroku pgbackups:url`
... и это дает мне "формат дампа базы данных", а не "обычный текстовый формат", поэтому я не могу этого сделать:
$ psql -d my_local_database -f my_dump_file.sql
Ответы
Ответ 1
Вы можете просто создать свой собственный pg_dump непосредственно из своей базы данных Heroku.
Сначала введите строку postgres, используя heroku config:get DATABASE_URL
.
Ищите URL-адрес Heroku Postgres (пример: HEROKU_POSTGRESQL_RED_URL: postgres://user3123:[email protected]:6212/db982398
), формат которого postgres://<username>:<password>@<host_name>:<port>/<dbname>
.
Затем запустите это в командной строке:
pg_dump --host=<host_name> --port=<port> --username=<username> --password --dbname=<dbname> > output.sql
Терминал запросит пароль, затем запустит его и выгрузит в output.sql.
Затем импортируйте его:
psql -d my_local_database -f output.sql
Ответ 2
Heroku PGBackups на самом деле использует pg_dump за кулисами, а "пользовательский формат" - это фактически пользовательский формат pg_dump (параметр -Fc
), а не собственный пользовательский формат Heroku.
Это означает, что вы можете использовать pg_restore
, который является частью Postgres, для непосредственного восстановления резервной копии Heroku в другую базу данных:
pg_restore -d mydatabase my_dump_file.dump
Кроме того, если вы вызываете pg_restore
без указания базы данных для восстановления, она будет печатать стандартные операторы SQL, поэтому вы можете превратить резервную копию Heroku в файл SQL следующим образом:
pg_restore my_dump_file.dump > sql_statements.sql
Ответ 3
Предполагая, что в вашей среде настроен DATABASE_URL
, существует гораздо более простой способ:
heroku run 'pg_dump $DATABASE_URL' > my_database.sql
Это запустит pg_dump
в вашем контейнере и перенесет содержимое в локальный файл my_database.sql
. Одинаковые кавычки важны. Если вы используете двойные кавычки (или вообще не кавычки), DATABASE_URL
будет оцениваться локально, а не в вашем контейнере.
Если ваша цель состоит в том, чтобы загружать содержимое в локальную базу данных в любом случае, вы можете также его прямо туда:
createdb myapp_devel # start with an empty database
heroku run 'pg_dump -xO $DATABASE_URL' | psql myapp_devel
Добавление -xO
исключает команды dumping GRANT
, REVOKE
и ALTER OWNER
, которые, вероятно, не применяются к вашему локальному серверу базы данных. Если какая-либо из ваших команд COPY
терпит неудачу с ошибкой ERROR: literal carriage return found in data
(мой), см. этот ответ.
Вполне возможно, что это не сработало два с половиной года назад, когда этот вопрос изначально был задан, но для тех, кто ищет способ легко получить свалку своей базы данных Heroku Postgres, это, по-видимому, самый простой способ сделать это сегодня.
Ответ 4
Heroku pg:backups:capture
Heroku pg:backups:download
Взято из https://devcenter.heroku.com/articles/heroku-postgres-import-export.
Теперь у вас есть бинарный файл. Чтобы получить файл в текстовом формате, у меня сработало следующее. Примечание. Вам необходимо установить PostgreSQL.
pg_restore latest.dump > latest.sql