У меня есть локальный Docker-контейнер, работающий на PostgreSQL.Я хочу иметь возможность подключаться и взаимодействовать с этой базой данных из R, запущенной на моем хост-компьютере (Mac OS).
Я могу подключиться с помощью pgadmin4 по следующему адресу
http://0.0.0.0:5434/browser/
, а затем добавить новый сервер:
Добавить новый сервер.Вкладка «Общие» -> name: tagbase.Вкладка «Соединение» -> Имя хоста / адрес: postgres.Вкладка «Соединение» -> Порт: 5432. Вкладка «Соединение» -> База данных обслуживания: postgres.Вкладка «Соединение» -> Имя пользователя: tagbase
Это прекрасно работает.
Однако для подключения из RI попробуйте:
require("RPostgreSQL")
# load the PostgreSQL driver
drv <- dbDriver("PostgreSQL")
# create a connection to the postgres database
con <- RPostgreSQL::dbConnect(drv, dbname = "postgres",
host = "localhost", port = 5434,
user = "tagbase", password = "tagbase")
Эта попытка просто зависает, пока не произойдет сбой R.
Возможно, жизнеспособное решение - это что-то похожее на this .Большое спасибо за любую помощь.
РЕДАКТИРОВАТЬ - 20190207
Спасибо за комментарии.Я внес изменения без каких-либо улучшений, но согласился, что изменения необходимы.
Я успешно запускаю эту сеть докеров (из 3 контейнеров) через терминал, как показано ниже.Мне кажется, что я хочу подключиться к контейнеру postgres на 0.0.0.0 через порт 5432, правильно?
$ docker-compose up
Starting tagbase-server_postgres_1_3f42d4fc1a77 ... done
Starting tagbase-server_pgadmin4_1_52ab92a49f22 ... done
Starting tagbase-server_tagbase_1_9d3a22c8be46 ... done
Attaching to tagbase-server_postgres_1_3f42d4fc1a77, tagbase-server_pgadmin4_1_52ab92a49f22, tagbase-server_tagbase_1_9d3a22c8be46
postgres_1_3f42d4fc1a77 | 2019-02-05 19:35:45.999 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
Я думал, что подключался к серверу через R точно так же, как я использовал pgadmin, но следующее не работает:
# create a connection to the postgres database
con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(), dbname = "postgres",
host = "0.0.0.0", port = 5432,
user = "tagbase", password = "tagbase")
Error in postgresqlNewConnection(drv, ...) :
RS-DBI driver: (could not connect tagbase@0.0.0.0:5432 on dbname "postgres":
FATAL: role "tagbase" does not exist)
Теперь я понимаю, что pgadminтакже работает в сети контейнера докеров.Таким образом, локальный хост для соединения pgadmin является сервером базы данных.Похоже, мне нужно решение, подобное this
Обратите внимание, что источником для сборок докера является здесь , следуя инструкциям здесь .