Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for PostgreSQL
  • Начало работы
    • Все инструкции
      • Подключение к базе данных
      • SQL-запросы в Yandex WebSQL
      • Копирование и заполнение таблицы
      • Управление базами данных
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Настройка групп безопасности
  • Получение SSL-сертификата
  • FQDN хоста PostgreSQL
  • Особые FQDN
  • Текущий мастер
  • Наименее отстающая реплика
  • Выбор FQDN и способа подключения к кластеру
  • Подключение из графических IDE
  • Подключение из Yandex WebSQL
  • Подключение из pgAdmin 4
  • Подключение из Looker Studio
  • Подготовка к подключению из Docker-контейнера
  • Примеры строк подключения
  • 1C:Предприятие
  • Bash
  • C++ (фреймворк userver)
  • C# EF Core
  • Go
  • Java
  • Node.js
  • ODBC
  • PHP
  • PowerShell
  • Python
  • R
  • Ruby
  1. Пошаговые инструкции
  2. Базы данных
  3. Подключение к базе данных

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

Статья создана
Yandex Cloud
Улучшена
Обновлена 24 июля 2025 г.
  • Настройка групп безопасности
  • Получение SSL-сертификата
  • FQDN хоста PostgreSQL
  • Особые FQDN
    • Текущий мастер
    • Наименее отстающая реплика
  • Выбор FQDN и способа подключения к кластеру
  • Подключение из графических IDE
  • Подключение из Yandex WebSQL
  • Подключение из pgAdmin 4
  • Подключение из Looker Studio
  • Подготовка к подключению из Docker-контейнера
  • Примеры строк подключения
    • 1C:Предприятие
    • Bash
    • C++ (фреймворк userver)
    • C# EF Core
    • Go
    • Java
    • Node.js
    • ODBC
    • PHP
    • PowerShell
    • Python
    • R
    • Ruby

К хостам кластера Managed Service for PostgreSQL можно подключиться:

  • Через интернет, если вы настроили публичный доступ для нужного хоста. К таким хостам подключиться можно только используя SSL-соединение.

  • С виртуальных машин Yandex Cloud, расположенных в той же облачной сети. Если к хосту нет публичного доступа, для подключения с таких виртуальных машин необязательно использовать SSL-соединение.

  • Из контейнера Serverless Containers. Если к хосту нет публичного доступа, контейнер должен располагаться в той же облачной сети.

Важно

Если публичный доступ в кластере настроен только для некоторых хостов, автоматическая смена мастера может привести к невозможности подключиться к мастеру из интернета.

Настройка групп безопасностиНастройка групп безопасности

Для подключения к кластеру необходимо, чтобы группы безопасности содержали правила, которые разрешают трафик с определенных портов, IP-адресов или из других групп безопасности.

Настройки правил будут различаться в зависимости от выбранного способа подключения:

Через интернет
С ВМ в Yandex Cloud

Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик с любых IP-адресов на порт 6432. Для этого создайте следующее правило для входящего трафика:

  • Диапазон портов — 6432.
  • Протокол — TCP.
  • Источник — CIDR.
  • CIDR блоки — 0.0.0.0/0.
  1. Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик из группы безопасности, в которой находится ВМ, на порт 6432. Для этого в этих группах создайте следующее правило для входящего трафика:

    • Диапазон портов — 6432.
    • Протокол — TCP.
    • Источник — Группа безопасности.
    • Группа безопасности — если кластер и ВМ находятся в одной и той же группе безопасности, выберите значение Текущая (Self). В противном случае укажите группу безопасности ВМ.
  2. Настройте группу безопасности, в которой находится ВМ так, чтобы можно было подключаться к ВМ и был разрешен трафик между ВМ и хостами кластера.

    Пример правил для ВМ:

    • Для входящего трафика:

      • Диапазон портов — 22.
      • Протокол — TCP.
      • Источник — CIDR.
      • CIDR блоки — 0.0.0.0/0.

      Это правило позволяет подключаться к ВМ по протоколу SSH.

    • Для исходящего трафика:

      • Диапазон портов — 0-65535.
      • Протокол — Любой (Any).
      • Назначение — CIDR.
      • CIDR блоки — 0.0.0.0/0.

      Это правило разрешает любой исходящий трафик, что позволяет не только подключаться к кластеру, но и устанавливать на ВМ необходимые для этого сертификаты и утилиты.

Примечание

Вы можете задать более детальные правила для групп безопасности, например, разрешающие трафик только в определенных подсетях.

Группы безопасности должны быть корректно настроены для всех подсетей, в которых будут размещены хосты кластера. При неполных или некорректных настройках групп безопасности можно потерять доступ к кластеру, если произойдет ручная или автоматическая смена мастера.

Подробнее о группах безопасности см. в разделе Группы безопасности.

Получение SSL-сертификатаПолучение SSL-сертификата

Хосты PostgreSQL с публичным доступом поддерживают только шифрованные соединения. Чтобы использовать их, получите SSL-сертификат:

Linux (Bash)/macOS (Zsh)
Windows (PowerShell)
mkdir -p ~/.postgresql && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
     --output-document ~/.postgresql/root.crt && \
chmod 0655 ~/.postgresql/root.crt

Сертификат будет сохранен в файле ~/.postgresql/root.crt.

mkdir $HOME\.postgresql; curl.exe -o $HOME\.postgresql\root.crt https://storage.yandexcloud.net/cloud-certs/CA.pem

Сертификат будет сохранен в файле $HOME\.postgresql\root.crt.

Корпоративные политики и антивирус могут блокировать скачивание сертификата. Подробнее см. в разделе Вопросы и ответы.

Для использования графических IDE сохраните сертификат в локальную папку и укажите путь к нему в настройках подключения.

FQDN хоста PostgreSQLFQDN хоста PostgreSQL

Для подключения к хосту потребуется его FQDN — доменное имя. Его можно получить несколькими способами:

  • Запросите список хостов в кластере.

  • Скопируйте команду для подключения к кластеру в консоли управления. Команда содержит заполненный FQDN хоста. Чтобы получить команду, перейдите на страницу кластера и нажмите кнопку Подключиться.

  • Посмотрите FQDN в консоли управления:

    1. Перейдите на страницу кластера.
    2. Перейдите в раздел Хосты.
    3. Скопируйте значение в столбце FQDN хоста.

Для хостов кластера также используются особые FQDN.

Особые FQDNОсобые FQDN

Наравне с обычными FQDN, Managed Service for PostgreSQL предоставляет несколько особых FQDN, которые также можно использовать при подключении к кластеру.

В кластерах из нескольких хостов особые FQDN могут некоторое время (до 10 минут) указывать на старый хост, даже если он сменил роль (например, из мастера стал репликой). Если используется особый FQDN, который указывает на текущий мастер, то часть запросов на запись может завершиться неудачей — они могут быть направлены к реплике. Это связано с тем, что на обновление DNS-записей для особых FQDN требуется время. Если запрос на запись завершился ошибкой, повторите его позднее.

Текущий мастерТекущий мастер

FQDN вида c-<идентификатор_кластера>.rw.mdb.yandexcloud.net всегда указывает на текущий хост-мастер в кластере. Идентификатор кластера можно запросить со списком кластеров в каталоге.

При подключении к этому FQDN разрешено выполнять операции чтения и записи.

Важно

Используйте подключение с помощью особого FQDN хоста-мастера только для процессов, которые допускают недоступность базы данных на запись продолжительностью до 10 минут.

Наименее отстающая репликаНаименее отстающая реплика

FQDN вида c-<идентификатор_кластера>.ro.mdb.yandexcloud.net указывает на наименее отстающую от мастера реплику. Идентификатор кластера можно запросить со списком кластеров в каталоге.

Особенности:

  • При подключении к этому FQDN разрешено выполнять только операции чтения.
  • Если в кластере нет активных реплик, то этот FQDN укажет на текущий хост-мастер.
  • Реплики, для которых вручную установлен источник репликации, не могут выбираться как наименее отстающие при использовании этого FQDN.

Выбор FQDN и способа подключения к кластеруВыбор FQDN и способа подключения к кластеру

К кластеру можно подключиться с использованием FQDN хостов или с использованием особых FQDN. Если кластер состоит из нескольких хостов, и для него настроено автоматическое переключение мастера, то это необходимо учитывать при подключении. Это важно, потому что текущий мастер может в следующий момент времени стать репликой и наоборот.

Важно

Если при автоматическом переключении мастера новым мастером или наименее отстающей репликой станет хост без публичного доступа, подключиться к такому хосту из интернета будет невозможно. Чтобы этого избежать, включите публичный доступ для всех хостов кластера.

Воспользуйтесь одним из способов, чтобы подключиться к хостам-мастерам с возможностью чтения и записи:

  • Подключитесь с помощью особого FQDN, который указывает на текущий мастер.

    При переключении мастера этот FQDN может некоторое время указывать на бывший мастер, который стал репликой, поскольку необходимо время для обновления DNS-записи.

    Поэтому если приложение использует такой FQDN, то оно должно корректно обрабатывать ситуацию, когда мастер временно недоступен. Например, можно повторять запросы на запись через некоторое время.

    Пример подключения

    В этом примере используется идентификатор кластера c9qash3nb1v9********:

    psql "host=c-c9qash3nb1v9********.rw.mdb.yandexcloud.net \
          port=6432 \
          sslmode=verify-full \
          dbname=<имя_БД> \
          user=<имя_пользователя>"
    
  • Подключитесь, перечислив все хосты кластера и указав параметр target_session_attrs=read-write.

    Пример подключения

    В этом примере перечисляются все хосты кластера.

    Хосты имеют идентификаторы rc1a-be***.mdb.yandexcloud.net, rc1b-5r***.mdb.yandexcloud.net и rc1d-t4***.mdb.yandexcloud.net:

    psql "host=rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.net,rc1d-t4***.mdb.yandexcloud.net \
          port=6432 \
          sslmode=verify-full \
          dbname=<имя_БД> \
          user=<имя_пользователя> \
          target_session_attrs=read-write"
    

Воспользуйтесь одним из способов, чтобы подключиться к хостам с возможностью чтения:

  • Подключитесь с помощью особого FQDN, который указывает на наименее отстающую реплику.

    Пример подключения

    В этом примере используется идентификатор кластера c9qash3nb1v9********:

    psql "host=c-c9qash3nb1v9********.ro.mdb.yandexcloud.net \
          port=6432 \
          sslmode=verify-full \
          dbname=<имя_БД> \
          user=<имя_пользователя>"
    
  • Подключитесь, перечислив все хосты кластера и указав параметр target_session_attrs=any.

    Пример подключения

    В этом примере перечисляются все хосты кластера.

    Хосты имеют идентификаторы rc1a-be***.mdb.yandexcloud.net, rc1b-5r***.mdb.yandexcloud.net и rc1d-t4***.mdb.yandexcloud.net:

    psql "host=rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.net,rc1d-t4***.mdb.yandexcloud.net \
          port=6432 \
          sslmode=verify-full \
          dbname=<имя_БД> \
          user=<имя_пользователя> \
          target_session_attrs=any"
    

Примечание

Параметр target_session_attrs можно указать, если для подключения используется клиент, работающий с библиотекой libpq.

Значение read-write для этого параметра поддерживается библиотекой libpq начиная с версии 10.

Как обновить версию библиотеки, которую использует утилита psql
  • Для дистрибутивов Linux на основе Debian — установите пакет postgresql-client-10 или новее (например, через apt-репозиторий).
  • Для ОС, использующих RPM-пакеты — воспользуйтесь дистрибутивом PostgreSQL, доступным в yum-репозитории.

Подключение из графических IDEПодключение из графических IDE

Подключения проверялись в следующем окружении:

  • Ubuntu 20.04, DBeaver: 22.2.4;
  • MacOS Monterey 12.7:
    • JetBrains DataGrip: 2023.3.4;
    • DBeaver Community: 24.0.0.

Подключаться из графических IDE можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.

Чтобы избежать ошибок при подключении, сохраните сертификат в локальную папку, для доступа к которой не требуются права администратора.

DataGrip
DBeaver
  1. Создайте источник данных:
    1. Выберите в меню File → New → Data Source → PostgreSQL.
    2. Укажите параметры подключения на вкладке General:
      • User, Password — имя и пароль пользователя БД;

      • URL — строка подключения:

        jdbc:postgresql://<особый_FQDN>:6432>/<имя_БД>
        

        Также в строке подключения можно использовать список FQDN всех хостов кластера:

        jdbc:postgresql://<хост_1_PostgreSQL:6432>,...,<хост_N_PostgreSQL:6432>/<имя_БД>
        
      • Нажмите ссылку Download, чтобы загрузить драйвер соединения.

    3. На вкладке SSH/SSL:
      1. Включите настройку Use SSL.
      2. В поле CA file укажите путь к файлу SSL-сертификата для подключения.
  2. Нажмите ссылку Test Connection для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  3. Нажмите кнопку OK, чтобы сохранить источник данных.
  1. Создайте новое соединение с БД:
    1. Выберите в меню База данных пункт Новое соединение.
    2. Выберите из списка БД PostgreSQL.
    3. Нажмите кнопку Далее.
    4. Укажите параметры подключения на вкладке Главное:
      • Хост — особый FQDN хоста-мастера или обычный FQDN хоста;
      • Порт — 6432;
      • База данных — имя БД для подключения;
      • В блоке Аутентификация укажите имя и пароль пользователя БД.
    5. На вкладке SSL:
      1. Включите настройку Использовать SSL.
      2. В поле Корневой сертификат укажите путь к сохраненному файлу SSL-сертификата.
  2. Нажмите кнопку Тест соединения ... для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  3. Нажмите кнопку Готово, чтобы сохранить настройки соединения с БД.

Подключение из Yandex WebSQLПодключение из Yandex WebSQL

Вы можете отправлять SQL-запросы к базам данных в кластере Managed Service for PostgreSQL с помощью сервиса Yandex WebSQL.

WebSQL — это сервис Yandex Cloud, который позволяет подключаться к кластерам управляемых баз данных, работать с БД, таблицами и схемами и выполнять запросы. Сервис работает в браузере, не требует дополнительной авторизации и предлагает удобные подсказки для работы с SQL-командами.

Чтобы подключаться из WebSQL к кластеру Managed Service for PostgreSQL, необходимо создать подключение:

  1. Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
  2. Нажмите на имя нужного кластера.
  3. Включите опцию Доступ из WebSQL в настройках кластера, если она еще не включена.
  4. Выберите вкладку WebSQL.
  5. Нажмите кнопку Создать подключение и укажите параметры подключения:
    • Имя подключения.
    • Тип базы данных — PostgreSQL.
    • Кластер — будет автоматически выбран текущий кластер PostgreSQL.
    • Имя пользователя, от лица которого вы будете подключаться к базе данных в кластере.
    • Пароль пользователя.
    • Базы данных, к которым вы хотите подключиться. Вы можете подключиться только к существующим в этом кластере БД. У пользователя, которого вы указали, должен быть настроен доступ к ним.
  6. Нажмите кнопку Создать.

Чтобы открыть SQL-редактор, нажмите на созданное подключение на вкладке WebSQL. Справочник по поддерживаемым запросам можно найти в документации PostgreSQL.

Примечание

С помощью команд SQL нельзя выполнять действия, требующие прав суперпользователя.

Подробнее о работе с WebSQL см. в документации сервиса.

Подключение из pgAdmin 4Подключение из pgAdmin 4

Подключение проверялось для pgAdmin 4 версии 7.0 в Ubuntu 20.04.

Подключаться из pgAdmin 4 можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.

Создайте новое подключение к серверу:

  1. Выберите в меню Object → Register → Server...

  2. На вкладке General в поле Name укажите имя, под которым кластер будет отображаться в интерфейсе pgAdmin 4. Имя может быть любым.

  3. На вкладке Connection укажите параметры подключения:

    • Host name/address — особый FQDN хоста-мастера или обычный FQDN хоста;
    • Port — 6432;
    • Maintenance database — имя БД для подключения;
    • Username — имя пользователя, от имени которого выполняется подключение;
    • Password — пароль пользователя.
  4. На вкладке Parameters:

    • Установите параметр SSL mode в значение verify-full.
    • Добавьте новый параметр Root certificate и укажите в нем путь к сохраненному файлу SSL-сертификата.
  5. Нажмите кнопку Save, чтобы сохранить настройки подключения к серверу.

Кластер появится в списке серверов в навигационном меню.

Подключение из Looker StudioПодключение из Looker Studio

Подключаться из Looker Studio можно только к хостам кластера в публичном доступе.

  1. Сохраните сертификат сервера CA.pem в локальную папку.

  2. В той же папке сгенерируйте сертификат клиента с приватным ключом:

    openssl req -newkey rsa:2048 -nodes -keyout private.pem -out cert.pem
    

    При создании сертификата программа предложит изменить ряд настроек. Нажмите Enter, чтобы использовать для них значения по умолчанию.

    В локальной папке появятся два файла: cert.pem и private.pem.

  3. На странице навигации Looker Studio выберите Создать → Источник данных.

  4. Выберите PostgreSQL.

  5. Заполните поля:

    • Имя хоста или IP-адрес — особый FQDN хоста-мастера или обычный FQDN хоста;
    • Порт — 6432;
    • База данных — имя БД для подключения;
    • Имя пользователя — имя пользователя, от имени которого выполняется подключение;
    • Пароль — пароль пользователя.
  6. Выберите опции Включить SSL и Включить аутентификацию клиента.

  7. Укажите файлы сертификатов и приватный ключ клиента в соответствующих полях:

    • Server certificate — выберите файл CA.pem.
    • Client certificate — выберите файл cert.pem.
    • Client private key — выберите файл private.pem.
  8. Нажмите Выполнить аутентификацию.

Подготовка к подключению из Docker-контейнераПодготовка к подключению из Docker-контейнера

Чтобы подключаться к кластеру Managed Service for PostgreSQL из Docker-контейнера, добавьте в Dockerfile строки:

Подключение без SSL
Подключение с SSL
RUN apt-get update && \
    apt-get install postgresql-client --yes

Пример подключения из Yandex Serverless Containers см. в практическом руководстве.

RUN apt-get update && \
    apt-get install wget postgresql-client --yes && \
    mkdir --parents ~/.postgresql && \
    wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
         --output-document ~/.postgresql/root.crt && \
    chmod 0655 ~/.postgresql/root.crt

Примеры строк подключенияПримеры строк подключения

Примеры проверялись в следующем окружении:

  • Виртуальная машина в Yandex Cloud с Ubuntu 20.04 LTS:
    • Bash: 5.0.16.
    • Python: 3.8.2; pip3: 20.0.2.
    • PHP: 7.4.3.
    • OpenJDK: 11.0.8; Maven: 3.6.3.
    • Node.JS: 10.19.0, npm: 6.14.4.
    • Go: 1.13.8.
    • Ruby: 2.7.0p0.
    • unixODBC: 2.3.6.
  • Виртуальная машина в Yandex Cloud с Windows Server 2019 Datacenter:
    • PostgreSQL: 13.
    • PowerShell: 5.1.17763.1490 Desktop.
    • .NET 5
    • Microsoft.EntityFrameworkCore 5.0.9
    • Npgsql.EntityFrameworkCore.PostgreSQL 5.0.7

Подключиться к хостам PostgreSQL в публичном доступе можно только с использованием SSL-сертификата. Перед подключением к таким хостам подготовьте сертификат.

В примерах ниже предполагается, что SSL-сертификат root.crt расположен в директории:

  • /home/<домашняя_директория>/.postgresql/ для Ubuntu;
  • $HOME\AppData\Roaming\postgresql для Windows.

Подключение без использования SSL-сертификата поддерживается только для хостов, находящихся не в публичном доступе. В этом случае трафик внутри облачной сети при подключении к БД шифроваться не будет.

Подключиться к кластеру возможно как с использованием обычных FQDN хостов (можно передавать список из нескольких таких FQDN, разделенных запятой), так и особых FQDN. В примерах используется особый FQDN текущего хоста-мастера.

Примеры кода с заполненным FQDN хоста доступны в консоли управления по нажатию кнопки Подключиться на странице кластера.

1C:Предприятие1C:Предприятие

Если кластер использует версию PostgreSQL, оптимизированную для работы с системой 1С:Предприятие, укажите в настройках:

  • Защищенное соединение — отключено.
  • Тип СУБД — PostgreSQL.
  • Сервер баз данных — с-<идентификатор_кластера>.rw.mdb.yandexcloud.net port=6432.
  • Имя базы данных — <имя_БД>.
  • Пользователь базы данных — <имя_пользователя>.
  • Пароль пользователя — <пароль>.
  • Создать базу данных в случае ее отсутствия — отключено.

BashBash

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes postgresql-client
Подключение без SSL
Подключение с SSL
  1. Подключитесь к базе данных:

    psql "host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \
          port=6432 \
          sslmode=disable \
          dbname=<имя_БД> \
          user=<имя_пользователя> \
          target_session_attrs=read-write"
    

    После выполнения команды введите пароль пользователя для завершения процедуры подключения.

  2. Для проверки успешности подключения выполните запрос:

    SELECT version();
    
  1. Подключитесь к базе данных:

    psql "host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \
          port=6432 \
          sslmode=verify-full \
          dbname=<имя_БД> \
          user=<имя_пользователя> \
          target_session_attrs=read-write"
    

    После выполнения команды введите пароль пользователя для завершения процедуры подключения.

  2. Для проверки успешности подключения выполните запрос:

    SELECT version();
    

C++ (фреймворк userver)C++ (фреймворк userver)

Асинхронный фреймворк userver предоставляет богатый набор абстракций для создания утилит, сервисов и микросервисов на языке C++. В том числе фреймворк предоставляет возможности для взаимодействия с PostgreSQL.

Перед подключением получите доступ к фреймворку одним из способов:

  • Создайте виртуальную машину Yandex Compute Cloud из образа userver. Этот образ уже содержит фреймворк и все необходимые зависимости.
  • Вручную установите фреймворк и все необходимые зависимости.
Подключение без SSL
Подключение с SSL
  1. Создайте проект на основе шаблона для сервиса.

  2. Измените конфигурационный файл configs/config_vars.yaml. В качестве значения переменной dbconnection укажите строку подключения к кластеру PostgreSQL:

    postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>
    
  3. Соберите проект и запустите сервис:

    make build-debug && \
    ./build_debug/pg_service_template -c configs/static_config.yaml --config_vars configs/config_vars.yaml
    
  1. Создайте проект на основе шаблона для сервиса.

  2. Измените конфигурационный файл configs/config_vars.yaml. В качестве значения переменной dbconnection укажите строку подключения к кластеру PostgreSQL:

    postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>?ssl=true&sslmode=verify-full
    
  3. Соберите проект и запустите сервис:

    make build-debug && \
    ./build_debug/pg_service_template -c configs/static_config.yaml --config_vars configs/config_vars.yaml
    

После запуска сервис будет ожидать поступления POST-запроса от пользователя. В ходе ожидания запроса сервис будет периодически проверять доступность кластера PostgreSQL, выполняя запрос SELECT 1 as ping. Информация об этом содержится в логах работы сервиса.

Пример содержимого логов при успешном подключении к кластеру
tskv ... level=INFO      module=MakeQuerySpan ( userver/postgresql/src/storages/postgres/detail/connection_impl.cpp:647 )
...
db_statement=SELECT 1 AS ping
db_type=postgres
db_instance=********
peer_address=c-********.rw.mdb.yandexcloud.net:6432
...

C# EF CoreC# EF Core

Для подключения к кластеру необходим пакет Npgsql.

Подключение с SSL
using Npgsql;

namespace ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var host       = "c-<идентификатор_кластера>.rw.mdb.yandexcloud.net";
            var port       = "6432";
            var db         = "<имя_БД>";
            var username   = "<имя_пользователя>";
            var password   = "<пароль_пользователя>";
            var connString = $"Host={host};Port={port};Database={db};Username={username};Password={password};Ssl Mode=VerifyFull;";

            await using var conn = new NpgsqlConnection(connString);
            await conn.OpenAsync();

            await using (var cmd = new NpgsqlCommand("SELECT VERSION();", conn))
            await using (var reader = await cmd.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    Console.WriteLine(reader.GetInt32(0));
                }
            }
        }
    }
}

GoGo

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes golang git && \
go mod init example && go get github.com/jackc/pgx/v4
Подключение без SSL
Подключение с SSL
  1. Пример кода:

    connect.go

    package main
    
    import (
        "context"
        "fmt"
        "os"
    
        "github.com/jackc/pgx/v4"
    )
    
    const (
      host     = "c-<идентификатор_кластера>.rw.mdb.yandexcloud.net"
      port     = 6432
      user     = "<имя_пользователя>"
      password = "<пароль_пользователя>"
      dbname   = "<имя_БД>"
    )
    
    func main() {
    
        connstring := fmt.Sprintf(
            "host=%s port=%d dbname=%s user=%s password=%s target_session_attrs=read-write",
            host, port, dbname, user, password)
    
        connConfig, err := pgx.ParseConfig(connstring)
        if err != nil {
            fmt.Fprintf(os.Stderr, "Unable to parse config: %v\n", err)
            os.Exit(1)
        }
    
        conn, err := pgx.ConnectConfig(context.Background(), connConfig)
        if err != nil {
            fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
            os.Exit(1)
        }
    
        defer conn.Close(context.Background())
    
        var version string
    
        err = conn.QueryRow(context.Background(), "select version()").Scan(&version)
        if err != nil {
            fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
            os.Exit(1)
        }
    
        fmt.Println(version)
    }
    
  2. Подключение:

    go run connect.go
    
  1. Пример кода:

    connect.go

    package main
    
    import (
        "context"
        "crypto/tls"
        "crypto/x509"
        "fmt"
        "io/ioutil"
        "os"
    
        "github.com/jackc/pgx/v4"
    )
    
    const (
      host     = "c-<идентификатор_кластера>.rw.mdb.yandexcloud.net"
      port     = 6432
      user     = "<имя_пользователя>"
      password = "<пароль_пользователя>"
      dbname   = "<имя_БД>"
      ca       = "/home/<домашняя_директория>/.postgresql/root.crt"
    )
    
    func main() {
    
        rootCertPool := x509.NewCertPool()
        pem, err := ioutil.ReadFile(ca)
        if err != nil {
            panic(err)
        }
    
        if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
            panic("Failed to append PEM.")
        }
    
        connstring := fmt.Sprintf(
            "host=%s port=%d dbname=%s user=%s password=%s sslmode=verify-full target_session_attrs=read-write",
            host, port, dbname, user, password)
    
        connConfig, err := pgx.ParseConfig(connstring)
        if err != nil {
            fmt.Fprintf(os.Stderr, "Unable to parse config: %v\n", err)
            os.Exit(1)
        }
    
        connConfig.TLSConfig = &tls.Config{
            RootCAs:            rootCertPool,
            ServerName: "c-<идентификатор_кластера>.rw.mdb.yandexcloud.net",
        }
    
        conn, err := pgx.ConnectConfig(context.Background(), connConfig)
        if err != nil {
            fmt.Fprintf(os.Stderr, "Unable to connect to database: %v\n", err)
            os.Exit(1)
        }
    
        defer conn.Close(context.Background())
    
        var version string
    
        err = conn.QueryRow(context.Background(), "select version()").Scan(&version)
        if err != nil {
            fmt.Fprintf(os.Stderr, "QueryRow failed: %v\n", err)
            os.Exit(1)
        }
    
        fmt.Println(version)
    }
    

    При этом способе подключения в коде необходимо указывать полный путь к сертификату root.crt для PostgreSQL в переменной ca.

  2. Подключение:

    go run connect.go
    

JavaJava

Перед подключением:

  1. Установите зависимости:

    sudo apt update && sudo apt install --yes default-jdk maven
    
  2. Создайте директорию для проекта Maven:

    cd ~/ && mkdir -p project/src/java/com/example && cd project/
    
  3. Создайте конфигурационный файл для Maven:

    pom.xml
    <?xml version="1.0" encoding="utf-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>
      <artifactId>app</artifactId>
      <packaging>jar</packaging>
      <version>0.1.0</version>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.postgresql</groupId>
          <artifactId>postgresql</artifactId>
          <version>42.2.16</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <sourceDirectory>src</sourceDirectory>
        <resources>
          <resource>
            <directory>src</directory>
          </resource>
        </resources>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>attached</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <descriptorRefs>
                    <descriptorRef>
                    jar-with-dependencies</descriptorRef>
                  </descriptorRefs>
                  <archive>
                    <manifest>
                      <mainClass>com.example.App</mainClass>
                    </manifest>
                  </archive>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>com.example.App</mainClass>
                </manifest>
              </archive>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    

    Актуальная версия зависимости для Maven: postgresql.

Подключение без SSL
Подключение с SSL
  1. Пример кода:

    src/java/com/example/App.java

    package com.example;
    
    import java.sql.*;
    
    public class App {
      public static void main(String[] args) {
        String DB_URL     = "jdbc:postgresql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>?targetServerType=master&ssl=false&sslmode=disable";
        String DB_USER    = "<имя_пользователя>";
        String DB_PASS    = "<пароль_пользователя>";
    
        try {
          Class.forName("org.postgresql.Driver");
    
          Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
          ResultSet q = conn.createStatement().executeQuery("SELECT version()");
          if(q.next()) {System.out.println(q.getString(1));}
    
          conn.close();
        }
        catch(Exception ex) {ex.printStackTrace();}
      }
    }
    
  2. Сборка и подключение:

    mvn clean package && \
    java -jar target/app-0.1.0-jar-with-dependencies.jar
    
  1. Пример кода:

    src/java/com/example/App.java

    package com.example;
    
    import java.sql.*;
    
    public class App {
      public static void main(String[] args) {
        String DB_URL     = "jdbc:postgresql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>?targetServerType=master&ssl=true&sslmode=verify-full";
        String DB_USER    = "<имя_пользователя>";
        String DB_PASS    = "<пароль_пользователя>";
    
        try {
          Class.forName("org.postgresql.Driver");
    
          Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
          ResultSet q = conn.createStatement().executeQuery("SELECT version()");
          if(q.next()) {System.out.println(q.getString(1));}
    
          conn.close();
        }
        catch(Exception ex) {ex.printStackTrace();}
      }
    }
    
  2. Сборка и подключение:

    mvn clean package && \
    java -jar target/app-0.1.0-jar-with-dependencies.jar
    

Node.jsNode.js

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes nodejs npm && \
npm install pg
Подключение без SSL
Подключение с SSL

app.js

"use strict";
const pg = require("pg");

const config = {
    connectionString:
        "postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>"
};

const conn = new pg.Client(config);

conn.connect((err) => {
    if (err) throw err;
});
conn.query("SELECT version()", (err, q) => {
    if (err) throw err;
    console.log(q.rows[0]);
    conn.end();
});

app.js

"use strict";
const fs = require("fs");
const pg = require("pg");

const config = {
    connectionString:
        "postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>",
    ssl: {
        rejectUnauthorized: true,
        ca: fs
            .readFileSync("/home/<домашняя_директория>/.postgresql/root.crt")
            .toString(),
    },
};

const conn = new pg.Client(config);

conn.connect((err) => {
    if (err) throw err;
});
conn.query("SELECT version()", (err, q) => {
    if (err) throw err;
    console.log(q.rows[0]);
    conn.end();
});

При этом способе подключения в коде необходимо указывать полный путь к сертификату root.crt для PostgreSQL в переменной ca.

Идентификатор кластера можно получить со списком кластеров.

Подключение:

node app.js

ODBCODBC

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes unixodbc odbc-postgresql

Драйвер PostgreSQL ODBC будет автоматически зарегистрирован в файле /etc/odbcinst.ini.

Подключение без SSL
Подключение с SSL
  1. Пример кода:

    /etc/odbc.ini

    [postgresql]
    Driver=PostgreSQL Unicode
    Servername=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
    Username=<имя_пользователя>
    Password=<пароль_пользователя>
    Database=<имя_БД>
    Port=6432
    Pqopt=target_session_attrs=read-write
    
  2. Подключение:

    isql -v postgresql
    

    После подключения к СУБД выполните команду SELECT version();.

  1. Пример кода:

    /etc/odbc.ini

    [postgresql]
    Driver=PostgreSQL Unicode
    Servername=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
    Username=<имя_пользователя>
    Password=<пароль_пользователя>
    Database=<имя_БД>
    Port=6432
    Pqopt=target_session_attrs=read-write
    Sslmode=verify-full
    
  2. Подключение:

    isql -v postgresql
    

    После подключения к СУБД выполните команду SELECT version();.

PHPPHP

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes php php-pgsql
Подключение без SSL
Подключение с SSL
  1. Пример кода:

    connect.php

    <?php
      $conn = pg_connect("
          host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
          port=6432
          sslmode=disable
          dbname=<имя_БД>
          user=<имя_пользователя>
          password=<пароль_пользователя>
          target_session_attrs=read-write
      ");
    
    $q = pg_query($conn, "SELECT version()");
    $result = pg_fetch_row($q);
    echo $result[0];
    
    pg_close($conn);
    ?>
    
  2. Подключение:

    php connect.php
    
  1. Пример кода:

    connect.php

    <?php
      $conn = pg_connect("
          host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
          port=6432
          sslmode=verify-full
          dbname=<имя_БД>
          user=<имя_пользователя>
          password=<пароль_пользователя>
          target_session_attrs=read-write
      ");
    
    $q = pg_query($conn, "SELECT version()");
    $result = pg_fetch_row($q);
    echo $result[0];
    
    pg_close($conn);
    ?>
    
  2. Подключение:

    php connect.php
    

PowerShellPowerShell

Перед подключением установите PostgreSQL для Windows той же версии, которая используется в кластере. Выберите только установку Command Line Tools.

Подключение без SSL
Подключение с SSL
  1. Установите переменные окружения для подключения:

    $Env:PGSSLMODE="disable"; $Env:PGTARGETSESSIONATTRS="read-write"
    
  2. Подключитесь к базе данных:

    & "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" `
          --host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net `
          --port=6432 `
          --username=<имя_пользователя> `
          <имя_БД>
    

    После выполнения команды введите пароль пользователя для завершения процедуры подключения.

  3. Для проверки успешности подключения выполните запрос:

    SELECT version();
    
  1. Установите переменные окружения для подключения:

    $Env:PGSSLMODE="verify-full"; $Env:PGTARGETSESSIONATTRS="read-write"
    
  2. Подключитесь к базе данных:

    & "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" `
      --host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net `
      --port=6432 `
      --username<имя_пользователя> `
      <имя_БД>
    

    После выполнения команды введите пароль пользователя для завершения процедуры подключения.

  3. Для проверки успешности подключения выполните запрос:

    SELECT version();
    

PythonPython

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install psycopg2-binary
Подключение без SSL
Подключение с SSL
  1. Пример кода:

    connect.py

    import psycopg2
    
    conn = psycopg2.connect("""
        host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
        port=6432
        sslmode=disable
        dbname=<имя_БД>
        user=<имя_пользователя>
        password=<пароль_пользователя>
        target_session_attrs=read-write
    """)
    
    q = conn.cursor()
    q.execute('SELECT version()')
    
    print(q.fetchone())
    
    conn.close()
    
  2. Подключение:

    python3 connect.py
    
  1. Пример кода:

    connect.py

    import psycopg2
    
    conn = psycopg2.connect("""
        host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
        port=6432
        sslmode=verify-full
        dbname=<имя_БД>
        user=<имя_пользователя>
        password=<пароль_пользователя>
        target_session_attrs=read-write
    """)
    
    q = conn.cursor()
    q.execute('SELECT version()')
    
    print(q.fetchone())
    
    conn.close()
    
  2. Подключение:

    python3 connect.py
    

RR

Перед подключением:

  1. Установите зависимости:

    sudo apt update && sudo apt install libpq-dev r-base --yes
    
  2. Установите библиотеку RPostgres:

    sudo R --interactive
    install.packages("RPostgres")
    quit()
    
Подключение без SSL
Подключение с SSL
  1. Пример кода:

    connect.r

    library(DBI)
    
    conn <- dbConnect(RPostgres::Postgres(),
        dbname="<имя_БД>",
        host="c-<идентификатор_кластера>.rw.mdb.yandexcloud.net",
        port=6432,
        user="<имя_пользователя>",
        password="<пароль_пользователя>"
    )
    
    res <- dbSendQuery(conn, "SELECT VERSION();")
    dbFetch(res)
    dbClearResult(res)
    
    dbDisconnect(conn)
    
  2. Подключение:

    R connect.r
    
  1. Пример кода:

    connect.r

    library(DBI)
    
    conn <- dbConnect(RPostgres::Postgres(),
        dbname="<имя_БД>",
        host="c-<идентификатор_кластера>.rw.mdb.yandexcloud.net",
        port=6432,
        sslmode="verify-full",
        user="<имя_пользователя>",
        password="<пароль_пользователя>"
    )
    
    res <- dbSendQuery(conn, "SELECT VERSION();")
    dbFetch(res)
    dbClearResult(res)
    
    dbDisconnect(conn)
    
  2. Подключение:

    R connect.r
    

RubyRuby

Перед подключением установите зависимости:

sudo apt update && sudo apt install --yes ruby ruby-pg
Подключение без SSL
Подключение с SSL
  1. Пример кода:

    connect.rb

    require "pg"
    
    conn = PG.connect("
            host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
            port=6432
            dbname=<имя_БД>
            user=<имя_пользователя>
            password=<пароль_пользователя>
            target_session_attrs=read-write
            sslmode=disable
    ")
    
    q = conn.exec("SELECT version()")
    puts q.getvalue 0, 0
    
    conn.close()
    
  2. Подключение:

    ruby connect.rb
    
  1. Пример кода:

    connect.rb

    require "pg"
    
    conn = PG.connect("
            host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
            port=6432
            dbname=<имя_БД>
            user=<имя_пользователя>
            password=<пароль_пользователя>
            target_session_attrs=read-write
            sslmode=verify-full
    ")
    
    q = conn.exec("SELECT version()")
    puts q.getvalue 0, 0
    
    conn.close()
    
  2. Подключение:

    ruby connect.rb
    

При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия PostgreSQL. Исключение — пример для фреймворка userver, в котором будет выполняться тестовый запрос SELECT 1 as ping для периодической проверки доступности кластера PostgreSQL.

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.

Была ли статья полезна?

Предыдущая
Удаление кластера
Следующая
SQL-запросы в Yandex WebSQL
Проект Яндекса
© 2025 ООО «Яндекс.Облако»