Я пытаюсь перенести базу данных heroku в базу данных, размещенную на линоде (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 db и следовать его синтаксису для моего собственного линода pg db.
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]
Тогда я получаю, что проблема с ним даже не принимает, что его собственный db uri действителен:
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]
Итак, я go хорошо, может быть, они вместо этого хотят это имя "Add-on:":
$ 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 не только на localhost. Поэтому он должен быть в состоянии принимать внешние соединения.
РЕДАКТИРОВАТЬ: Я искал эти ресурсы для помощи, но обнаружил, что им очень не хватает каких-либо подробных c деталей, которые являются критически важным для на самом деле сделать это: https://devcenter.heroku.com/articles/heroku-postgresql#pg -pu sh -and-pg-pull
https://blog.heroku.com/push_and_pull_databases_to_and_from_heroku
РЕДАКТИРОВАТЬ: Я получил файл дампа ..... но это означает, что команды heroku не работают. Да, я могу сделать это с файлом дампа. Однако я расстроен, говоря нам, что эта команда API может работать, и она не может ... никто не докажет, что я неправ. Я похвалу тебя, если сможешь.