[Документация Yandex Cloud](../../../index.md) > [Yandex Managed Service for PostgreSQL](../../index.md) > [Пошаговые инструкции](../index.md) > [Подключение](index.md) > Подключение из приложений

# Подключение к кластеру PostgreSQL из приложений

К кластеру PostgreSQL можно подключиться с помощью [инструментов командной строки](#command-line-tools), из [графических IDE](#connection-ide), [Yandex WebSQL](#websql), [pgAdmin 4](#connection-pgadmin), [Data Studio](#connection-google-looker) (ранее Looker Studio) и [Docker-контейнера](#connection-docker). О подключении из кода вашего приложения читайте в разделе [Примеры кода](code-examples.md).

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

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

При необходимости перед подключением [настройте группы безопасности](index.md#configuring-security-groups) кластера.

## Инструменты командной строки {#command-line-tools}

Примеры кода с заполненным FQDN хоста доступны в [консоли управления](https://kz.console.yandex.cloud) по нажатию кнопки **Подключиться** на странице кластера.

### Linux (Bash) {#bash}

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

```bash
sudo apt update && sudo apt install --yes postgresql-client
```

{% list tabs group=connection %}

- Подключение без SSL {#without-ssl}

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

      ```bash
      psql "host=<список_хостов_кластера> \
            port=6432 \
            sslmode=disable \
            dbname=<имя_БД> \
            user=<имя_пользователя> \
            target_session_attrs=read-write"
      ```

      В параметре `host` указываются хосты кластера через запятую в формате `<зона_доступности>-<идентификатор_хоста>.<зона_DNS>` (пример: `rc1a-goh2a9tr********.mdb.yandexcloud.kz`).    

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

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

      ```bash
      SELECT version();
      ```

- Подключение с SSL {#with-ssl}

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

      ```bash
      psql "host=<список_хостов_кластера> \
            port=6432 \
            sslmode=verify-full \
            dbname=<имя_БД> \
            user=<имя_пользователя> \
            target_session_attrs=read-write"
      ```

      В параметре `host` указываются хосты кластера через запятую в формате `<зона_доступности>-<идентификатор_хоста>.<зона_DNS>` (пример: `rc1a-goh2a9tr********.mdb.yandexcloud.kz`).

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

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

      ```bash
      SELECT version();
      ```

{% endlist %}

### Windows (PowerShell) {#powershell}

Перед подключением установите [PostgreSQL для Windows](https://www.postgresql.org/download/windows/) той же версии, которая используется в кластере. Выберите только установку *Command Line Tools*.

{% list tabs group=connection %}

- Подключение без SSL {#without-ssl}

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

     ```powershell
     $Env:PGSSLMODE="disable"; $Env:PGTARGETSESSIONATTRS="read-write"
     ```

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

     ```powershell
     & "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" `
           --host=<список_хостов> `
           --port=6432 `
           --username=<имя_пользователя> `
           <имя_БД>
     ```

     В параметре `host` указываются хосты кластера через запятую в формате `<зона_доступности>-<идентификатор_хоста>.<зона_DNS>` (пример: `rc1a-goh2a9tr********.mdb.yandexcloud.kz`).     

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

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

     ```sql
     SELECT version();
     ```

- Подключение с SSL {#with-ssl}

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

      ```powershell
      $Env:PGSSLMODE="verify-full"; $Env:PGTARGETSESSIONATTRS="read-write"
      ```

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

      ```powershell
      & "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" `
        --host=<список_хостов> `
        --port=6432 `
        --username<имя_пользователя> `
        <имя_БД>
      ```

      В параметре `host` указываются хосты кластера через запятую в формате `<зона_доступности>-<идентификатор_хоста>.<зона_DNS>` (пример: `rc1a-goh2a9tr********.mdb.yandexcloud.kz`).

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

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

     ```sql
     SELECT version();
     ```

{% endlist %}


### Подключение с аутентификацией через IAM {#iam}

К базе данных PostgreSQL можно подключиться с помощью [интерфейса командной строки Yandex Cloud (CLI)](../../../cli/quickstart.md#install), используя аутентификацию через IAM. Этот метод доступен для [аккаунтов на Яндексе](../../../iam/concepts/users/accounts.md#passport), [федеративных аккаунтов](../../../iam/concepts/users/accounts.md#saml-federation) и [локальных пользователей](../../../iam/concepts/users/accounts.md#local). Подключение с аутентификацией через IAM не требует получения SSL-сертификата или указания FQDN хостов кластера.

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

```bash
sudo apt update && sudo apt install --yes postgresql-client
```

Подготовьте кластер PostgreSQL к подключению:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Managed Service for&nbsp;PostgreSQL**.
  1. Нажмите на имя нужного кластера.
  1. Включите публичный доступ для хостов кластера:
     1. Выберите вкладку **Хосты**.
     1. Нажмите значок ![image](../../../_assets/console-icons/ellipsis.svg) в строке первого хоста и выберите пункт **Редактировать**.
     1. Включите опцию **Публичный доступ**.
     1. Повторите операцию для остальных хостов кластера.
  1. Назначьте роль аккаунту пользователя, который будет подключаться к БД:
     1. Выберите вкладку **Права доступа** и нажмите кнопку **Назначить роли**.
     1. Введите электронную почту пользователя, к которой привязан аккаунт.
     1. Нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) **Добавить роль** и выберите роль `managed-postgresql.clusters.connector`.
     1. Нажмите кнопку **Сохранить**.
  1. Создайте пользователя PostgreSQL:
     1. Выберите вкладку **Пользователи**.
     1. Нажмите кнопку **Создать пользователя**.
     1. Выберите способ аутентификации **IAM**.
     1. Выберите аккаунт, которому была назначена роль `managed-postgresql.clusters.connector`.
     1. В поле **База данных** нажмите значок ![image](../../../_assets/console-icons/plus.svg).
     1. Выберите базу данных из выпадающего списка.
     1. Нажмите кнопку **Сохранить**.

{% endlist %}

Чтобы подключиться к БД PostgreSQL, выполните команду:

```bash
yc managed-postgresql connect <имя_или_идентификатор_кластера> --db <имя_БД>
```



## Подключение из графических IDE {#connection-ide}

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

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

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

Чтобы избежать ошибок при подключении, [сохраните сертификат](https://storage.yandexcloud.kz/cloud-certs/RootCA.pem) в локальную папку, для доступа к которой не требуются права администратора.

{% list tabs group=ide %}

- DataGrip {#datagrip}

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

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

          Также в строке подключения можно использовать список [FQDN](fqdn.md) всех хостов кластера:

          ```http
          jdbc:postgresql://<хост_1_PostgreSQL>:6432,...,<хост_N_PostgreSQL>:6432/<имя_БД>
          ```

        * Нажмите ссылку **Download**, чтобы загрузить драйвер соединения.
     1. На вкладке **SSH/SSL**:
         1. Включите настройку **Use SSL**.
         1. В поле **CA file** укажите путь к файлу [SSL-сертификата для подключения](index.md#get-ssl-cert).
  1. Нажмите ссылку **Test Connection** для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  1. Нажмите кнопку **OK**, чтобы сохранить источник данных.

- DBeaver {#dbeaver}

  1. Создайте новое соединение с БД:
     1. Выберите в меню **База данных** пункт **Новое соединение**.
     1. Выберите из списка БД **PostgreSQL**.
     1. Нажмите кнопку **Далее**.
     1. Укажите параметры подключения на вкладке **Главное**:
        * **Хост** — [особый FQDN хоста-мастера](fqdn.md#fqdn-master) или [обычный FQDN хоста](fqdn.md);
        * **Порт** — `6432`;
        * **База данных** — имя БД для подключения;
        * В блоке **Аутентификация** укажите имя и пароль пользователя БД.
     1. На вкладке **SSL**:
         1. Включите настройку **Использовать SSL**.
         1. В поле **Корневой сертификат** укажите путь к сохраненному файлу [SSL-сертификата](index.md#get-ssl-cert).
  1. Нажмите кнопку **Тест соединения ...** для проверки подключения. При успешном подключении будут выведены статус подключения, информация о СУБД и драйвере.
  1. Нажмите кнопку **Готово**, чтобы сохранить настройки соединения с БД.

{% endlist %}





## Подключение из браузера {#browser}

Чтобы подключиться к кластеру Managed Service for PostgreSQL, войдите в [консоль управления](https://kz.console.yandex.cloud), откройте страницу нужного кластера и перейдите на вкладку **SQL**.

Для разрешения подключения включите опцию **Доступ из консоли управления** при [создании кластера](../cluster-create.md) или [изменении его настроек](../update.md#change-additional-settings).

Подробнее в разделе [SQL-запросы](../web-sql-query.md).



## Подключение из pgAdmin 4 {#connection-pgadmin}

Подключение проверялось для [pgAdmin 4](https://www.pgadmin.org) версии 7.0 в Ubuntu 20.04.

Подключаться из pgAdmin 4 можно только к хостам кластера в публичном доступе с [использованием SSL-сертификата](index.md#get-ssl-cert).

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

1. Выберите в меню **Object** → **Register** → **Server...**
1. На вкладке **General** в поле **Name** укажите имя, под которым кластер будет отображаться в интерфейсе pgAdmin 4. Имя может быть любым.
1. На вкладке **Connection** укажите параметры подключения:

    * **Host name/address** — [особый FQDN хоста-мастера](fqdn.md#fqdn-master) или обычный [FQDN](../../concepts/network.md#hostname) хоста;
    * **Port** — `6432`;
    * **Maintenance database** — имя БД для подключения;
    * **Username** — имя пользователя, от имени которого выполняется подключение;
    * **Password** — пароль пользователя.

1. На вкладке **Parameters**:

    * Установите параметр **SSL mode** в значение `verify-full`.
    * Добавьте новый параметр **Root certificate** и укажите в нем путь к сохраненному файлу SSL-сертификата.

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

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

## Подключение из Data Studio {#connection-google-looker}

Подключаться из [Data Studio](https://datastudio.google.com/overview) можно только к хостам кластера в публичном доступе.

1. Сохраните [сертификат сервера](https://storage.yandexcloud.kz/cloud-certs/CA.pem) `CA.pem` в локальную папку.
1. В той же папке сгенерируйте сертификат клиента с приватным ключом:

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

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

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

1. На [странице навигации Data Studio](https://lookerstudio.google.com/navigation/reporting) выберите **Создать** → **Источник данных**.
1. Выберите PostgreSQL.
1. Заполните поля:

    * **Имя хоста или IP-адрес** — [особый FQDN хоста-мастера](fqdn.md#fqdn-master) или обычный [FQDN](../../concepts/network.md#hostname) хоста;
    * **Порт** — `6432`;
    * **База данных** — имя БД для подключения;
    * **Имя пользователя** — имя пользователя, от имени которого выполняется подключение;
    * **Пароль** — пароль пользователя.

1. Выберите опции **Включить SSL** и **Включить аутентификацию клиента**.
1. Укажите файлы сертификатов и приватный ключ клиента в соответствующих полях:

    * **Server certificate** — выберите файл `CA.pem`.
    * **Client certificate** — выберите файл `cert.pem`.
    * **Client private key** — выберите файл `private.pem`.

1. Нажмите **Выполнить аутентификацию**.


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

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

{% list tabs group=connection %}

- Подключение без SSL {#without-ssl}

    ```bash
    RUN apt-get update && \
        apt-get install postgresql-client --yes
    ```

    
    Пример подключения из Yandex Serverless Containers вы найдете в [практическом руководстве](../../../serverless-containers/tutorials/pg-connect.md).


- Подключение с SSL {#with-ssl}

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

{% endlist %}