Push database to heroku: как использовать heroku pg: push
Я хочу нажать мою локальную базу данных postgresql на герою, используя команду heroku pg:push
. Команда выглядит так: heroku pg:push mylocaldb DATABASE --app sushi
в соответствии с документом heroku: https://devcenter.heroku.com/articles/heroku-postgresql.
Вот моя локальная информация о базе данных:
Name: mysitedb
User: bill
Password: bill
Переменная среды DATABASE_URL в моей машине имеет значение: postgres://bill:[email protected]/mysitedb
.
Мое имя приложения secure-gorge-4090
. Я попробовал heroku pg:push mysitedb DATABASE --app secure-gorge-4090
. Вывод:
! Remote database is not empty.
! Please create a new database, or use `heroku pg:reset`
Я был удивлен тем, что ничего не добавил в свою базу данных. Но я все еще бежал heroku pg:reset DATABASE
до reset моей БАЗЫ ДАННЫХ. После этого я снова попробовал heroku pg:push mysitedb DATABASE --app secure-gorge-4090
, но результат остался прежним.
Я попробовал heroku pg:push postgres://bill:[email protected]:8000/mysitedb DATABASE --app secure-gorge-4090
. Вывод:
! LOCAL_SOURCE_DATABASE is not a valid database name
Я не знаю, как использовать эту команду, чтобы переместить мою локальную базу данных в герою. Мне нужна ваша помощь. Спасибо!
Ответы
Ответ 1
Действительно ли вы набираете токен DATABASE
в своих командах или это то, что вы используете для этого вопроса? Из документов, которые вы связали с:
Like pull but in reverse, pg:push will push data from a local database into
a remote Heroku Postgres database. The command looks like this:
$ heroku pg:push mylocaldb HEROKU_POSTGRESQL_MAGENTA --app sushi
This command will take the local database "mylocaldb" and push it to the
database at DATABASE_URL on the app "sushi". In order to prevent accidental
data overwrites and loss, the remote database must be empty. You will be
prompted to pg:reset an already a remote database that is not empty.
Usage of the PGUSER and PGPASSWORD for your local database is also supported
for pg:push, just like for the pg:pull commands.
Когда вы выполняете heroku config -a secure-gorge-4090
, вы должны увидеть запись для HEROKU_POSTGRESQL_[SOME COLOR NAME]
. Убедитесь, что вы используете то же самое, что и токен вместо DATABASE
в ваших командах.
Поскольку у вас есть имя пользователя и пароль в локальной базе данных, вам также нужно сделать часть, упомянутую в PGUSER
и PGPASSWORD
. Вот пример из pg:pull
docs:
$ PGUSER=postgres PGPASSWORD=password heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi
Итак, вы должны сделать что-то вроде:
$ PGUSER=bill PGPASSWORD=bill heroku pg:push mysitedb HEROKU_POSTGRESQL_[SOME COLOR] -a secure-gorge-4090
Ответ 2
Я знаю, что это старая дискуссия, но у меня была такая же проблема. Хотя это не совсем удобно, мне удалось добиться этого через pg: backups.
Это подробно описано на веб-сайте heroku
Начните с установки бесплатного аддона pgbackups:
heroku addons:add pgbackups
Затем создайте резервную копию базы данных с помощью локальной утилиты pg_dump (включенной в дистрибутив PostGreSQL)
pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb > mydb.dmp
Затем поместите этот файл дампа где-то URL-адрес (например, Dropbox) и запустите импорт героя (убедитесь, что это двойные кавычки для Windows):
heroku pg:backups:restore 'https://dropbox.com/dYAKjgzSTNVp4jzE/mydb.dmp' DATABASE_URL
Ответ 3
Вам понадобится следующая команда
PGUSER=root PGPWD=root heroku pg:push (local database name) DATABASE_URL --app heroku (app name)
убедитесь, что вы ввели правильное имя пользователя и пароль postgres