Подтвердить что ты не робот

Как я могу получить дамп базы данных 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
4b9b3361

Ответ 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