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

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

4b9b3361

Ответ 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 заключается в следующем:

  1. Перейти к старой (исходной) панели инструментов приложения на Heroku
  2. Выберите вкладку "Ресурсы"
  3. Найдите ресурс (база данных postgres, в нашем случае здесь)
  4. Нажмите на значок рядом с названием плана в правой части строки, в которой указан ресурс.
  5. Выберите опцию "Присоединить к другому приложению" и выберите более новое (целевое) имя приложения из списка, который отображается

Пример расширенного меню, упомянутого @шаг № 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 создает новую базу данных, либо копируя файлы данных, либо восстанавливая из физической (файловой) резервной копии, а затем воспроизводит журналы, чтобы привести их в соответствие с последними данными.