Как загрузить db из heroku?
Я использую heroku, и я хочу загрузить базу данных из своего приложения (heroku), чтобы внести в нее некоторые изменения, я установил pgbackups, но используя heroku pgbackups:url
загружает файл .dump
Как загрузить файл postgresql или перевести этот .dump в файл postgresql?
Ответы
Ответ 1
Если вы используете Heroku pgbackups (который вы, вероятно, должны использовать):
$ heroku pg:backups capture
$ curl -o latest.dump `heroku pg:backups public-url`
"Перевести" его в postgres db с помощью
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
См. https://devcenter.heroku.com/articles/heroku-postgres-import-export
Ответ 2
В CLI есть команда для этого - heroku db:pull
которая сделает это за вас. db:pull
может быть немного медленным, поэтому вам лучше использовать следующую опцию.
Если вы используете сложные типы данных postgress (hstore, arrays и т.д.), Вам необходимо использовать плагин pgtransfer https://github.com/ddollar/heroku-pg-transfer, который в основном создает резервную копию на Heroku и восстанавливает ее локально,
ОБНОВЛЕНИЕ: db:pull
и db:push
устарели и должны быть заменены на pg:pull
и pg:push
- подробнее на https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and- пг-вытяжная
Ответ 3
Я нашел первый метод, предложенный в документацию pull/push еще проще. Не требуется пароль или имя пользователя.
пг: тянуть
pg: pull можно использовать для вытаскивания удаленных данных из Postgres Heroku базы данных в базу данных на вашем локальном компьютере. Команда выглядит так: это:
$ heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi
Эта команда создаст новую локальную базу данных с именем "mylocaldb" и затем вытащите данные из базы данных в DATABASE_URL
из приложения "суши". В чтобы предотвратить случайные записи и потери данных, локальные база данных не должна существовать. Вам будет предложено отказаться от уже существующей локальной базы данных, прежде чем продолжить.
Сначала у меня была ошибка: /bin/sh: createdb: command not found
; который я решил после этого сообщения SO.
Альтернатива, описанная также в документации (я еще не пробовал ее):
Чтобы экспортировать данные из базы данных Heroku Postgres, создайте новую резервного копирования и загрузки.
$ heroku pg:backups:capture
$ heroku pg:backups:download
Источник: Импорт и экспорт баз данных Heroku Postgres с резервными копиями PG
Ответ 4
Я думаю, что самый простой способ загрузить и реплицировать базу данных на локальном сервере:
**PGUSER**=LOCAL_USER_NAME PGPASSWORD=LOCAL_PASSWORD heroku pg:pull --app APP_NAME HEROKU_POSTGRESQL_DB_NAME LOCAL_DB_NAME
Пройдите этот документ для получения дополнительной информации:
https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and-pg-pull
Ответ 5
Это сценарий, который мне нравится использовать.
namespace :heroku do
desc "Import most recent database dump"
task :import_from_prod => :environment do
puts 'heroku run pg:backups capture --app APPNAME'
restore_backup 'APPNAME'
end
def path_to_heroku
['/usr/local/heroku/bin/heroku', '/usr/local/bin/heroku'].detect {|path| File.exists?(path)}
end
def heroku(command, site)
'GEM_HOME='' BUNDLE_GEMFILE='' GEM_PATH='' RUBYOPT='' #{path_to_heroku} #{command} -a #{site}'
end
def restore_backup(site = 'APPNAME')
dump_file = "#{Rails.root}/tmp/postgres.dump"
unless File.exists?(dump_file)
pgbackups_url = heroku('pg:backups public-url -q', site).chomp
puts "curl -o #{dump_file} #{pgbackups_url}"
system "curl -o #{dump_file} '#{pgbackups_url}'"
end
database_config = YAML.load(File.open("#{Rails.root}/config/database.yml")).with_indifferent_access
dev_db = database_config[Rails.env]
system "pg_restore -d #{dev_db[:database]} -c #{dump_file}".gsub(/\s+/,' ')
puts
puts "'rm #{dump_file}' to redownload postgres dump."
puts "Done!"
end
end
Ответ 6
Чтобы экспортировать данные из базы данных Heroku Postgres, выполните следующие действия.
- Войти в Heroku
- Перейдите на APP-> настройки-> открыть переменную конфигурации
- Копировать DATABASE_URL
- запустите
pg_dump --DATABASE_URL_COPIED_IN_STEP_3 > database_dump_file
Обратите внимание, что это будет файл postgresql или файл дампа, который можно загрузить непосредственно из интерфейса дополнения postgres.