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

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

  • 1C:Предприятие
  • C++ (фреймворк userver)
  • C# EF Core
  • Go
  • Java
  • Node.js
  • ODBC
  • PHP
  • Python
  • R
  • Ruby
  1. Пошаговые инструкции
  2. Подключение
  3. Примеры кода

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

Статья создана
Yandex Cloud
Улучшена
Обновлена 26 февраля 2026 г.
  • 1C:Предприятие
  • C++ (фреймворк userver)
  • C# EF Core
  • Go
  • Java
  • Node.js
  • ODBC
  • PHP
  • Python
  • R
  • Ruby

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

  • Виртуальная машина в 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.
  • Имя базы данных — <имя_БД>.
  • Пользователь базы данных — <имя_пользователя>.
  • Пароль пользователя — <пароль>.
  • Создать базу данных в случае ее отсутствия — отключено.

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
    

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.

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

Предыдущая
Подключение из приложений
Следующая
SQL-запросы в Yandex WebSQL
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»