Heroku перевод db из одного приложения в другое
Мне нужно перенести db из app_1 в app_2
Я создал резервную копию на app_1
Затем выполнил:
heroku pg: восстановление резервных копий HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1
HEROKU_POSTGRESQL_COLOR = URL-адрес базы данных для app_2
Тогда я получаю:
! `pg:backups` is not a heroku command.
! Perhaps you meant `pgbackups`.
! See `heroku help` for a list of available commands.
Итак, я побежал:
heroku pgbackups: восстановить HEROKU_POSTGRESQL_COLOR --app app_2 heroku pgbackups:url --app app_1
Затем я получаю следующее:
! WARNING: Destructive Action
! This command will affect the app: app_2
! To proceed, type "app_2" or re-run this command with --confirm app_2
Итак, я подтвердил:
> app_2
! Please add the pgbackups addon first via:
! heroku addons:add pgbackups
Итак, я побежал: heroku addons:add pgbackups --app app_2
Adding pgbackups on app_2... failed
! Add-on plan not found.
Есть ли способ решить эту проблему? любая помощь будет принята с благодарностью!
* Решение *
Я закончил рассылку по электронной почте Heroku, они сообщили, что мне нужно heroku update; heroku plugins:update
, но heroku update
доступно только для инструментальной панели heroku, и у меня установлен жемчуг.
Решение:
Установите инструмент Heroku toolbelt здесь
Затем удалите драгоценный камень:
gem uninstall heroku --all
запустите следующую команду, чтобы получить версию, и она должна выводить heroku-toolbelt
вместо gem, больше здесь
$ heroku --version
heroku-toolbelt/2.39.0 (x86_64-darwin10.8.0) ruby/1.9.3
Чтобы скопировать базы данных:
heroku pg:backups restore `heroku pgbackups:url --app app_1` HEROKU_POSTGRESQL_COLOR --app app_2
Но даже лучше - вы можете копировать напрямую из одной базы данных в другую без необходимости резервного копирования:
Предполагая, что URL-адрес базы данных app_2: HEROKU_POSTGRESQL_GOLD
heroku pg:copy app_1::DATABASE_URL GOLD -a app_2
Это скопирует основную базу данных из app_1 в базу данных GOLd на app_2
Ответы
Ответ 1
его единственная 1 команда для копирования базы данных из приложения в приложение теперь вам не нужно делать резервную копию:
heroku pg:copy app_name_to_copy_from::database_color_to_copy_from database_color_to_copy_to --app app_name_to_copy_to
проверьте здесь
Ответ 2
Если вы посмотрите heroku docs
, он говорит
Резервные копии PG в качестве надстройки устарели. Команды существуют как часть пространства имен Heroku Postgres в CLI. Новая функциональность доступна и доступна для использования.
Итак, вы можете использовать pgbackups functionality directly
, не добавляя никаких надстроек
Чтобы создать резервную копию, вы можете запустить
heroku pg:backups capture --app app_name
Если у вас несколько баз данных, вы можете указать URL-адрес базы данных, например
heroku pg:backups capture HEROKU_POSTGRESQL_PINK
В restore from a backup on another app
вы можете запустить
heroku pg:backups restore b001 DATABASE_URL --app app_name
Вы можете transfer database
heroku pg: copy DATABASE_URL HEROKU_POSTGRESQL_PINK_URL --app app_name
Вы также можете upload your database to a public url and then use that url to import database
в другом приложении
heroku pg:backups public-url b001 --app app_name
а затем import
его
heroku pg:backups restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE -a app_name
Если вы переходите из одного приложения в другое и хотите использовать одну и ту же базу данных для другого приложения, вы можете выполнить следующие действия:
- Войдите в свою учетную запись heroku
- Выберите свое старое приложение и перейдите на вкладку настроек
- Показать конфигурационные файлы для вашего старого приложения
- Скопировать DATABASE_URL
- Вернитесь назад и выберите новое приложение.
- Замените новые приложения DATABASE_URL на значение старых приложений
Ответ 3
heroku pg:copy app1_name::HEROKU_POSTGRESQL_ONYX_URL HEROKU_POSTGRESQL_AQUA_URL --app app2_name
Где второй URL базы данных находится на app2_name
Ответ 4
В соответствии с веб-сайтом аддон амортизируется. Таким образом, это может быть причиной сообщения об ошибке.
Резервные копии в качестве дополнения устарели.
Поскольку ваша цель - переместить db из одного приложения в другое, почему бы вам не попробовать инструкции, упомянутые в ссылке ниже.
https://devcenter.heroku.com/articles/heroku-postgres-backups#direct-database-to-database-copies
Ответ 5
Я обнаружил, что более простое решение для повторного использования/совместного использования одного и того же ресурса (в данном случае базы данных postgres - или любого другого, позволяющего совместное использование/повторное использование) с несколькими приложениями на heroku заключается в следующем:
- Перейти к старой (исходной) панели инструментов приложения на Heroku
- Выберите вкладку "Ресурсы"
- Найдите ресурс (база данных postgres, в нашем случае здесь)
- Нажмите на значок рядом с названием плана в правой части строки, в которой указан ресурс.
- Выберите опцию "Присоединить к другому приложению" и выберите более новое (целевое) имя приложения из списка, который отображается
Пример расширенного меню, упомянутого @шаг № 4 выше!
Это все, что нужно для совместного использования ресурса между приложениями, так как он автоматически обновляет все связанные параметры конфигурации в целевом приложении. Это удобно, поскольку ни одна из переменных конфигурации, связанных с надстройкой, не редактируется напрямую, по крайней мере, из панели мониторинга (не проверена через CLI). Надеюсь, это поможет любому, кто ищет подобную вещь.
Ответ 6
У меня была связанная с этим проблема. Вы можете сохранить резервную копию на свой локальный компьютер, а затем загрузить ее на какой-то хостинг, например amazon s3, и импортировать с данного URL-адреса.
Этот вопрос и следующий ответ могут вам помочь: Невозможно импортировать в базу данных postgres heroku из дампа
Ответ 7
Вы можете найти полезный pgAdmin III (http://pgadmin.org/), бесплатный инструмент управления db, специально предназначенный для выполнения этих задач. Вы можете напрямую редактировать/просматривать/импортировать/экспортировать из/в ваш Heroku db. Дайте мне знать, если вам нужна помощь в настройке. (Это похоже на MySQL Workbench, но для PostgreSQL).
Ответ 8
Есть простые способы сделать это, и есть быстрый способ сделать это
Простые способы обычно включают использование методологии резервного копирования/восстановления (включая pg:copy
, которая является резервной pg:copy
, которая передает данные непосредственно в процесс восстановления), но они медленно создают новую базу данных, поскольку вы восстанавливаете логическое определение таблиц, загрузка данных и создание индексов на данных.
Это большая работа, и для моих 30-ГБ стандартных баз данных это может занять буквально часы.
Самый быстрый способ сделать это - предоставить последователя базы данных для копирования (например, производства) в приложение, для которого вы хотите получить данные (например, тестирование). На тех же 30 ГБ базах данных, на восстановление которых уходили часы, эта последняя заняла около 15 минут.
Методология, которую я использую:
# Get the name of the source database addon (e.g. postgresql-clean-12345)
heroku pg:info -a production-app
# Create a follower on the destination app (choose your own plan)
# You create the follower on the new app because otherwise it is
# perpetually associated with the source as it "billing app"
heroku addons:create heroku-postgresql:standard-2 --follow postgresql-clean-12345 -a test-app
heroku pg:wait -a test-app
# Quiesce the destination app
heroku scale web=0 worker=0 -a test-app
heroku maintenance:on -a test-app
# Get the colour of the new database (e.g. HEROKU_POSTGRESQL_GRAY_URL)
heroku pg:info -a test-app
# Unfollow the source database.
# If you want to upgrade the database, do that now instead of the
# unfollow.
heroku pg:unfollow HEROKU_POSTGRESQL_GRAY_URL -a test-app
# Promote the new database on the destination app
heroku pg:promote HEROKU_POSTGRESQL_GRAY_URL -a test-app
# Get the colour of the old database, if any(e.g. HEROKU_POSTGRESQL_MAROON_URL)
heroku pg:info -a test-app
# Destroy the old database (if any)
heroku addons:destroy HEROKU_POSTGRESQL_MAROON_URL -a test-app
# Bring the test app back up
heroku scale web=1 worker=1 -a test-app
heroku maintenance:off -a test-app
Почему это быстрее?
Я считаю, что при создании последователя Heroku создает новую базу данных, либо копируя файлы данных, либо восстанавливая из физической (файловой) резервной копии, а затем воспроизводит журналы, чтобы привести их в соответствие с последними данными.