Подключение к базе данных в кластере PostgreSQL

Внутри Яндекс.Облака подключиться к кластеру БД можно только с виртуальной машины с адресом в той же подсети Облака.

Аутентификация

PostgreSQL-кластеры Managed Service for PostgreSQL поддерживают только шифрованные соединения. Поэтому для подключения к такому кластеру необходим SSL-сертификат. Подготовить все нужные аутентификационные данные можно так:

$ mkdir ~/.postgresql
$ wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O ~/.postgresql/CA.pem

О том, как использовать сертификат с помощью libpq, читайте в документации PostgreSQL.

Строка подключения

Теперь вы можете подключиться к БД с помощью команды psql:

psql "host=<адрес хоста БД> \
      port=6432 \
      sslmode=verify-full \
      dbname=<имя базы данных> \
      user=<имя пользователя базы данных>"

Автоматический выбор хоста-мастера

С библиотекой libpq

Чтобы гарантированно подключиться к хосту-мастеру, укажите адреса всех хостов кластера в аргументе host и передайте параметр target_session_attrs=read-write. Этот параметр поддерживается библиотекой libpq начиная с версии 10:

psql "host=<адрес хоста 1>,<адрес хоста 2>,<адрес хоста 3> \
      port=6432 \
      sslmode=verify-full \
      dbname=<имя базы данных> \
      user=<имя пользователя базы данных> \
      target_session_attrs=read-write"

Чтобы обновить версию библиотеки, которую использует утилита psql:

  • Для дистрибутивов Linux на основе Debian — установите пакет postgresql-client-10 (например, через apt-репозиторий).

  • Для ОС, использующих RPM-пакеты, дистрибутив PostgreSQL доступен в yum-репозитории.

Адреса всех хостов в кластере БД можно найти на странице нужного кластера в консоли управления.

С драйвером, поддерживающим только один хост

Если ваш драйвер для подключения к базе данных не позволяет передавать несколько хостов в строке подключения (например, pgx в Go), вы можете подключаться на специальный хост вида c-<идентификатор кластера>.rw.mdb.yandexcloud.net.

Это доменное имя всегда указывает на текущий мастер в кластере. Например, для кластера с идентификатором c9qash3nb1v9ulc8j9nm к мастеру можно подключиться так:

$ psql "host=c-c9qash3nb1v9ulc8j9nm.rw.mdb.yandexcloud.net \
      port=6432 \
      sslmode=verify-full \
      dbname=<имя базы данных> \
      user=<имя пользователя базы данных>"