Я пытаюсь перенести свою базу данных heroku в базу данных, которую я разместил на linode (linux vm).
Я могу заставить heroku распознавать свою собственную базу данных, а также правильное имя пользователя/базы данных удаленной базы данных. Однако он пытается выбрать мой локальный хост pg db, а не удаленный.
Это описание Heroku команды pg:pull:
$ heroku help pg:pull
See more details with DEBUG=*
pull Heroku database into local or remote database
USAGE
$ heroku pg:pull SOURCE TARGET
OPTIONS
-a, --app=app (required) app to run command against
-r, --remote=remote git remote of app to use
--exclude-table-data=exclude-table-data tables for which data should be excluded (use ';' to split multiple names)
DESCRIPTION
Pull from SOURCE into TARGET.
TARGET must be one of:
* a database name (i.e. on a local PostgreSQL server) => TARGET must not exist and will be created
* a fully qualified URL to a local PostgreSQL server => TARGET must not exist and will be created
* a fully qualified URL to a remote PostgreSQL server => TARGET must exist and be empty
To delete a local database run `dropdb TARGET`
To create an empty remote database, run `createdb` with connection command-line options (run `createdb --help` for details).
Examples:
# pull Heroku DB named postgresql-swimmingly-100 into local DB mylocaldb that must not exist
$ heroku pg:pull postgresql-swimmingly-100 mylocaldb --app sushi
# pull Heroku DB named postgresql-swimmingly-100 into empty remote DB at postgres://myhost/mydb
$ heroku pg:pull postgresql-swimmingly-100 postgres://myhost/mydb --app sushi
Я подумал, что неплохо, поэтому я попробовал: heroku pg:credentials:url
Что дает вам такую информацию, как:
Connection information for default credential.
Connection info string:
"dbname=[db name here] host=[aws ip here] port=5432 user=[db username] password=[db password here] sslmode=require"
Connection URL:
postgres://[db username]:[db password here]@[db ip here]:5432/[db name here]
Я подумал, что замечательно, что я могу использовать этот URL-адрес подключения выше для базы данных heroku и следовать его синтаксису для моей собственной базы данных linode pg.
heroku pg:pull postgres://[heroku db username]:[heroku db password here]@[heroku db ip here]:5432/[heroku db name here] postgres://[linode db username here]:[linode db password here]@[linode ip here]/[linode db name here] --app [my-app-name-here]
Затем я получаю проблему с тем, что он даже не принимает, что его собственный uri db действителен:
Unknown database:
[Stuff I put in for their db url here, like the full string]
Valid options are: DATABASE_URL
Хорошо, это немного расстраивает, потому что я знаю, что указанные выше учетные данные работают... Я подключился к моей базе данных heroku из моего приложения rails, используя эти учетные данные. Что бы там ни было, они просто хотят чего-то другого, поэтому я смотрю на:
$ heroku pg:info
task: runHook init
plugin: heroku
root: /usr/lib/heroku
See more details with DEBUG=*
=== DATABASE_URL
Plan: Hobby-dev
Status: Available
Connections: 1/20
PG Version: 11.6
Created: 2019-06-03 16:06 UTC
Data Size: 9.8 MB
Tables: 15
Rows: 450/10000 (In compliance)
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-[random name here]
Так что я согласен, может быть, они хотят это имя «Дополнение:» вместо этого:
$ heroku pg:pull postgresql-[random name here] postgres://[linode db username here]:[linode db password here]@[linode ip here]/[linode db name here] --app [my-app-name-here]
Это подводит меня очень близко, но теперь я в тупике, как заставить его смотреть на правильный IP-адрес/хост, вот что я получил:
heroku-cli: Pulling postgresql-[random name here] ---> postgres://[linode db username here]:[linode db password here]@[linode ip here]:5432/[linode db name here]
psql: FATAL: no pg_hba.conf entry for host [my **LOCAL** ip address], user [linode db username here], database [linode db name here], SSL on
▸ Remote database is not empty. Please create a new database or use heroku pg:reset
Я также пробовал:
$ heroku pg:pull postgresql-[random name here] postgres://[linode ip here]:5432/[linode db name here] --app [my-app-name-here]
Думал, что это каким-то образом возвращается к моему локальному, когда он не может понять удаленный. Та же ошибка, но имя пользователя - это имя пользователя моего локального компьютера, и все же мой IP-адрес, а не удаленный.
Это так близко, но почему он выбрал мой локальный IP-адрес? Он получил правильное имя пользователя linode / имя базы данных, но пытается подключить его локально, что, очевидно, не то, что я хотел.
Любые предложения будут очень признательны... Чувствую, что я следовал их командам так хорошо, как только мог.
На линоде у меня изменены настройки, поэтому он открыт на 0.0.0.0:5432, а не только на локальном хосте. Таким образом, он должен иметь возможность принимать внешние соединения.
РЕДАКТИРОВАТЬ: я просматривал эти ресурсы в поисках помощи, но обнаружил, что в них катастрофически не хватает каких-либо конкретных деталей, которые являются решающим моментом для того, чтобы сделать это: https://devcenter.heroku.com/articles/heroku-postgresql#pg-push-and-pg-pull< /а>
https://blog.heroku.com/push_and_pull_databases_to_and_from_heroku
EDIT: я получил файл дампа..... но это означает, что команды heroku не работают. Да, я могу сделать это с файлом дампа. Однако я расстроен, говоря нам, что эта команда API может работать и не может... кто-нибудь докажет, что я не прав. Я буду хвалить вас, если это возможно.