Подключение к базе данных в кластере PostgreSQL
К хостам кластера Managed Service for PostgreSQL можно подключиться:
-
Через интернет, если вы настроили публичный доступ для нужного хоста. К таким хостам подключиться можно только используя SSL-соединение.
-
С виртуальных машин Yandex Cloud, расположенных в той же облачной сети. Если к хосту нет публичного доступа, для подключения с таких виртуальных машин необязательно использовать SSL-соединение.
-
Из контейнера Serverless Containers. Если к хосту нет публичного доступа, контейнер должен располагаться в той же облачной сети.
Важно
Если публичный доступ в кластере настроен только для некоторых хостов, автоматическая смена мастера может привести к невозможности подключиться к мастеру из интернета.
Настройка групп безопасности
Для подключения к кластеру необходимо, чтобы группы безопасности содержали правила, которые разрешают трафик с определенных портов, IP-адресов или из других групп безопасности.
Настройки правил будут различаться в зависимости от выбранного способа подключения:
Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик с любых IP-адресов на порт 6432. Для этого создайте следующее правило для входящего трафика:
- Диапазон портов —
6432
. - Протокол —
TCP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
-
Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик из группы безопасности, в которой находится ВМ, на порт 6432. Для этого в этих группах создайте следующее правило для входящего трафика:
- Диапазон портов —
6432
. - Протокол —
TCP
. - Источник —
Группа безопасности
. - Группа безопасности — если кластер и ВМ находятся в одной и той же группе безопасности, выберите значение
Текущая
(Self
). В противном случае укажите группу безопасности ВМ.
- Диапазон портов —
-
Настройте группу безопасности, в которой находится ВМ так, чтобы можно было подключаться к ВМ и был разрешен трафик между ВМ и хостами кластера.
Пример правил для ВМ:
-
Для входящего трафика:
- Диапазон портов —
22
. - Протокол —
TCP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Это правило позволяет подключаться к ВМ по протоколу SSH.
- Диапазон портов —
-
Для исходящего трафика:
- Диапазон портов —
0-65535
. - Протокол —
Любой
(Any
). - Назначение —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Это правило разрешает любой исходящий трафик, что позволяет не только подключаться к кластеру, но и устанавливать на ВМ необходимые для этого сертификаты и утилиты.
- Диапазон портов —
-
Примечание
Вы можете задать более детальные правила для групп безопасности, например, разрешающие трафик только в определенных подсетях.
Группы безопасности должны быть корректно настроены для всех подсетей, в которых будут размещены хосты кластера. При неполных или некорректных настройках групп безопасности можно потерять доступ к кластеру, если произойдет ручная или автоматическая смена мастера.
Подробнее о группах безопасности см. в разделе Группы безопасности.
Получение SSL-сертификата
PostgreSQL-хосты с публичным доступом поддерживают только шифрованные соединения. Чтобы использовать их, получите SSL-сертификат:
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 хоста PostgreSQL
Для подключения к хосту потребуется его FQDN — доменное имя. Его можно получить несколькими способами:
-
Скопируйте команду для подключения к кластеру в консоли управления
. Команда содержит заполненный FQDN хоста. Чтобы получить команду, перейдите на страницу кластера и нажмите кнопку Подключиться. -
Посмотрите FQDN в консоли управления:
- Перейдите на страницу кластера.
- Перейдите в раздел Хосты.
- Скопируйте значение в столбце FQDN хоста.
Для хостов кластера также используются особые FQDN.
Особые FQDN
Наравне с обычными FQDN, Managed Service for PostgreSQL предоставляет несколько особых FQDN, которые также можно использовать при подключении к кластеру.
Важно
Если при автоматической смене мастера новым мастером или наименее отстающей репликой станет хост без публичного доступа, подключиться к ним из интернета будет невозможно. Чтобы этого избежать, включите публичный доступ для всех хостов кластера.
Текущий мастер
FQDN вида c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
всегда указывает на текущий хост-мастер в кластере. Идентификатор кластера можно запросить со списком кластеров в каталоге.
При подключении к этому FQDN разрешено выполнять операции чтения и записи.
Примечание
Используйте подключение с помощью особых FQDN хоста-мастера только для процессов, которые могут переживать 15-30 минут недоступность базы данных. Например, при переключении мастера приложение, которое использует FQDN хоста-мастера, еще некоторое время будет пытаться выполнять write
-запросы на реплике.
Пример подключения к хосту-мастеру для кластера с идентификатором c9qash3nb1v9********
:
psql "host=c-c9qash3nb1v9********.rw.mdb.yandexcloud.net \
port=6432 \
sslmode=verify-full \
dbname=<имя_БД> \
user=<имя_пользователя> \
target_session_attrs=read-write"
Наименее отстающая реплика
FQDN вида c-<идентификатор_кластера>.ro.mdb.yandexcloud.net
указывает на наименее отстающую от мастера реплику. Идентификатор кластера можно запросить со списком кластеров в каталоге.
Особенности:
- При подключении к этому FQDN разрешено выполнять только операции чтения.
- Если в кластере нет активных реплик, то этот FQDN укажет на текущий хост-мастер.
Пример подключения к наименее отстающей реплике для кластера с идентификатором c9qash3nb1v9********
:
psql "host=c-c9qash3nb1v9********.ro.mdb.yandexcloud.net \
port=6432 \
sslmode=verify-full \
dbname=<имя_БД> \
user=<имя_пользователя> \
target_session_attrs=any"
Автоматический выбор хоста-мастера
Чтобы гарантированно подключиться к хосту-мастеру:
-
Укажите в аргументе
host
на выбор:- или особый FQDN хоста-мастера, как сделано в примерах ниже;
- или FQDN всех хостов кластера.
-
Передайте параметр
target_session_attrs=read-write
. Этот параметр поддерживается библиотекойlibpq
начиная с версии 10 .
Чтобы обновить версию библиотеки, которую использует утилита psql
:
- Для дистрибутивов Linux на основе Debian — установите пакет
postgresql-client-10
или новее (например, через apt-репозиторий ). - Для ОС, использующих RPM-пакеты — воспользуйтесь дистрибутивом PostgreSQL, доступным в yum-репозитории
.
Подключение из графических IDE
Подключения проверялись в следующем окружении:
- Ubuntu 20.04, DBeaver:
22.2.4
; - MacOS Monterey 12.7:
- JetBrains DataGrip:
2023.3.4
; - DBeaver Community:
24.0.0
.
- JetBrains DataGrip:
Подключаться из графических IDE можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.
Чтобы избежать ошибок при подключении, сохраните сертификат
- Создайте источник данных:
- Выберите в меню File → New → Data Source → PostgreSQL.
- Укажите параметры подключения на вкладке General:
-
User, Password — имя и пароль пользователя БД;
-
URL — строка подключения:
jdbc:postgresql://<особый_FQDN>:6432>/<имя_БД>
Также в строке подключения можно использовать список FQDN всех хостов кластера:
jdbc:postgresql://<хост_1_PostgreSQL:6432>,...,<хост_N_PostgreSQL:6432>/<имя_БД>
-
Нажмите ссылку Download, чтобы загрузить драйвер соединения.
-
- На вкладке SSH/SSL:
- Включите настройку Use SSL.
- В поле CA file укажите путь к файлу SSL-сертификата для подключения.
- Нажмите ссылку Test Connection для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
- Нажмите кнопку OK, чтобы сохранить источник данных.
- Создайте новое соединение с БД:
- Выберите в меню База данных пункт Новое соединение.
- Выберите из списка БД PostgreSQL.
- Нажмите кнопку Далее.
- Укажите параметры подключения на вкладке Главное:
- Хост — особый FQDN хоста-мастера или обычный FQDN хоста;
- Порт —
6432
; - База данных — имя БД для подключения;
- В блоке Аутентификация укажите имя и пароль пользователя БД.
- На вкладке SSL:
- Включите настройку Использовать SSL.
- В поле Корневой сертификат укажите путь к сохраненному файлу SSL-сертификата.
- Нажмите кнопку Тест соединения ... для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
- Нажмите кнопку Готово, чтобы сохранить настройки соединения с БД.
Подключение из Yandex WebSQL
Вы можете отправлять SQL-запросы к базам данных в кластере Managed Service for PostgreSQL с помощью сервиса Yandex WebSQL.
WebSQL — это сервис Yandex Cloud, который позволяет подключаться к кластерам управляемых баз данных, работать с БД, таблицами и схемами и выполнять запросы. Сервис работает в браузере, не требует дополнительной авторизации и предлагает удобные подсказки для работы с SQL-командами.
Чтобы подключаться из WebSQL к кластеру Managed Service for PostgreSQL, необходимо создать подключение:
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера.
- Включите опцию Доступ из WebSQL в настройках кластера, если она еще не включена.
- Выберите вкладку WebSQL.
- Нажмите кнопку Создать подключение и укажите параметры подключения:
- Имя подключения.
- Тип базы данных — PostgreSQL.
- Кластер — будет автоматически выбран текущий кластер PostgreSQL.
- Имя пользователя, от лица которого вы будете подключаться к базе данных в кластере.
- Пароль пользователя.
- Базы данных, к которым вы хотите подключиться. Вы можете подключиться только к существующим в этом кластере БД. У пользователя, которого вы указали, должен быть настроен доступ к ним.
- Нажмите кнопку Создать.
Чтобы открыть SQL-редактор, нажмите на созданное подключение на вкладке WebSQL. Справочник по поддерживаемым запросам можно найти в документации PostgreSQL
Примечание
С помощью команд SQL нельзя выполнять действия, требующие прав суперпользователя.
Подробнее о работе с WebSQL см. в документации сервиса.
Подключение из pgAdmin 4
Подключение проверялось для pgAdmin 4
Подключаться из pgAdmin 4 можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.
Создайте новое подключение к серверу:
-
Выберите в меню Object → Register → Server...
-
На вкладке General в поле Name укажите имя, под которым кластер будет отображаться в интерфейсе pgAdmin 4. Имя может быть любым.
-
На вкладке Connection укажите параметры подключения:
- Host name/address — особый FQDN хоста-мастера или обычный FQDN хоста;
- Port —
6432
; - Maintenance database — имя БД для подключения;
- Username — имя пользователя, от имени которого выполняется подключение;
- Password — пароль пользователя.
-
На вкладке Parameters:
- Установите параметр SSL mode в значение
verify-full
. - Добавьте новый параметр Root certificate и укажите в нем путь к сохраненному файлу SSL-сертификата.
- Установите параметр SSL mode в значение
-
Нажмите кнопку Save, чтобы сохранить настройки подключения к серверу.
Кластер появится в списке серверов в навигационном меню.
Подключение из Looker Studio
Подключаться из Looker Studio
-
Сохраните сертификат сервера
CA.pem
в локальную папку. -
В той же папке сгенерируйте сертификат клиента с приватным ключом:
openssl req -newkey rsa:2048 -nodes -keyout private.pem -out cert.pem
При создании сертификата программа предложит изменить ряд настроек. Нажмите Enter, чтобы использовать для них значения по умолчанию.
В локальной папке появятся два файла:
cert.pem
иprivate.pem
. -
На странице навигации Looker Studio
выберите Создать → Источник данных. -
Выберите PostgreSQL.
-
Заполните поля:
- Имя хоста или IP-адрес — особый FQDN хоста-мастера или обычный FQDN хоста;
- Порт —
6432
; - База данных — имя БД для подключения;
- Имя пользователя — имя пользователя, от имени которого выполняется подключение;
- Пароль — пароль пользователя.
-
Выберите опции Включить SSL и Включить аутентификацию клиента.
-
Укажите файлы сертификатов и приватный ключ клиента в соответствующих полях:
- Server certificate — выберите файл
CA.pem
. - Client certificate — выберите файл
cert.pem
. - Client private key — выберите файл
private.pem
.
- Server certificate — выберите файл
-
Нажмите Выполнить аутентификацию.
Подготовка к подключению из Docker-контейнера
Чтобы подключаться к кластеру Managed Service for PostgreSQL из Docker-контейнера, добавьте в Dockerfile строки:
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
.
- Bash:
- Виртуальная машина в 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:
Подключиться к PostgreSQL-хостам в публичном доступе можно только с использованием SSL-сертификата. Перед подключением к таким хостам подготовьте сертификат.
В примерах ниже предполагается, что SSL-сертификат root.crt
расположен в директории:
/home/<домашняя_директория>/.postgresql/
для Ubuntu;$HOME\AppData\Roaming\postgresql
для Windows.
Подключение без использования SSL-сертификата поддерживается только для хостов, находящихся не в публичном доступе. В этом случае трафик внутри облачной сети при подключении к БД шифроваться не будет.
Подключиться к кластеру возможно как с использованием обычных FQDN хостов (можно передавать список из нескольких таких FQDN, разделенных запятой), так и особых FQDN. В примерах используется особый FQDN текущего хоста-мастера.
Примеры кода с заполненным FQDN хоста доступны в консоли управления
1C:Предприятие
Если кластер использует версию PostgreSQL, оптимизированную для работы с системой 1С:Предприятие
, укажите в настройках:
- Защищенное соединение — отключено.
- Тип СУБД —
PostgreSQL
. - Сервер баз данных —
с-<идентификатор_кластера>.rw.mdb.yandexcloud.net port=6432
. - Имя базы данных —
<имя_БД>
. - Пользователь базы данных —
<имя_пользователя>
. - Пароль пользователя —
<пароль>
. - Создать базу данных в случае ее отсутствия — отключено.
Bash
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes postgresql-client
-
Подключитесь к базе данных:
psql "host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \ port=6432 \ sslmode=disable \ dbname=<имя_БД> \ user=<имя_пользователя> \ target_session_attrs=read-write"
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения выполните запрос:
SELECT version();
-
Подключитесь к базе данных:
psql "host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \ port=6432 \ sslmode=verify-full \ dbname=<имя_БД> \ user=<имя_пользователя> \ target_session_attrs=read-write"
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения выполните запрос:
SELECT version();
C++ (фреймворк userver)
Асинхронный фреймворк userver
Перед подключением получите доступ к фреймворку одним из способов:
- Создайте виртуальную машину Yandex Compute Cloud из образа userver. Этот образ уже содержит фреймворк и все необходимые зависимости.
- Вручную установите фреймворк и все необходимые зависимости
.
-
Создайте проект на основе шаблона для сервиса
. -
Измените конфигурационный файл
configs/config_vars.yaml
. В качестве значения переменнойdbconnection
укажите строку подключения к кластеру PostgreSQL:postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>
-
Соберите проект и запустите сервис:
make build-debug && \ ./build_debug/pg_service_template -c configs/static_config.yaml --config_vars configs/config_vars.yaml
-
Создайте проект на основе шаблона для сервиса
. -
Измените конфигурационный файл
configs/config_vars.yaml
. В качестве значения переменнойdbconnection
укажите строку подключения к кластеру PostgreSQL:postgres://<имя_пользователя>:<пароль_пользователя>@c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/<имя_БД>?ssl=true&sslmode=verify-full
-
Соберите проект и запустите сервис:
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 Core
Для подключения к кластеру необходим пакет Npgsql
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));
}
}
}
}
}
Go
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes golang git && \
go mod init example && go get github.com/jackc/pgx/v4
-
Пример кода:
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) }
-
Подключение:
go run connect.go
-
Пример кода:
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
. -
Подключение:
go run connect.go
Java
Перед подключением:
-
Установите зависимости:
sudo apt update && sudo apt install --yes default-jdk maven
-
Создайте директорию для проекта Maven:
cd ~/ && mkdir -p project/src/java/com/example && cd project/
-
Создайте конфигурационный файл для 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
.
-
Пример кода:
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();} } }
-
Сборка и подключение:
mvn clean package && \ java -jar target/app-0.1.0-jar-with-dependencies.jar
-
Пример кода:
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();} } }
-
Сборка и подключение:
mvn clean package && \ java -jar target/app-0.1.0-jar-with-dependencies.jar
Node.js
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes nodejs npm && \
npm install pg
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
ODBC
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes unixodbc odbc-postgresql
Драйвер PostgreSQL ODBC будет автоматически зарегистрирован в файле /etc/odbcinst.ini
.
-
Пример кода:
/etc/odbc.ini
[postgresql] Driver=PostgreSQL Unicode Servername=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net Username=<имя_пользователя> Password=<пароль_пользователя> Database=<имя_БД> Port=6432 Pqopt=target_session_attrs=read-write
-
Подключение:
isql -v postgresql
После подключения к СУБД выполните команду
SELECT version();
.
-
Пример кода:
/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
-
Подключение:
isql -v postgresql
После подключения к СУБД выполните команду
SELECT version();
.
PHP
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes php php-pgsql
-
Пример кода:
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); ?>
-
Подключение:
php connect.php
-
Пример кода:
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); ?>
-
Подключение:
php connect.php
PowerShell
Перед подключением установите PostgreSQL для Windows
-
Установите переменные окружения для подключения:
$Env:PGSSLMODE="disable"; $Env:PGTARGETSESSIONATTRS="read-write"
-
Подключитесь к базе данных:
& "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" ` --host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net ` --port=6432 ` --username=<имя_пользователя> ` <имя_БД>
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения выполните запрос:
SELECT version();
-
Установите переменные окружения для подключения:
$Env:PGSSLMODE="verify-full"; $Env:PGTARGETSESSIONATTRS="read-write"
-
Подключитесь к базе данных:
& "C:\Program Files\PostgreSQL\<версия>\bin\psql.exe" ` --host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.net ` --port=6432 ` --username<имя_пользователя> ` <имя_БД>
После выполнения команды введите пароль пользователя для завершения процедуры подключения.
-
Для проверки успешности подключения выполните запрос:
SELECT version();
Python
Перед подключением установите зависимости:
sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install psycopg2-binary
-
Пример кода:
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()
-
Подключение:
python3 connect.py
-
Пример кода:
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()
-
Подключение:
python3 connect.py
R
Перед подключением:
-
Установите зависимости:
sudo apt update && sudo apt install libpq-dev r-base --yes
-
Установите библиотеку RPostgres
:sudo R --interactive install.packages("RPostgres") quit()
-
Пример кода:
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)
-
Подключение:
R connect.r
-
Пример кода:
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)
-
Подключение:
R connect.r
Ruby
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes ruby ruby-pg
-
Пример кода:
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()
-
Подключение:
ruby connect.rb
-
Пример кода:
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()
-
Подключение:
ruby connect.rb
При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия PostgreSQL. Исключение — пример для фреймворка userver, в котором будет выполняться тестовый запрос SELECT 1 as ping
для периодической проверки доступности кластера PostgreSQL.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc