Подключиться к кластеру PostgreSQL
К кластеру PostgreSQL можно подключиться:
через консольный клиент psql;
графический инструмент для управления базами данных pgAdmin;
офисные пакеты или приложения с поддержкой ODBC или JDBC;
программный код.
Для всех способов доступно подключение с SSL и без SSL .
При подключении укажите порт и адрес .
Порты для подключения
Для подключения к PostgreSQL используйте порты:
5433 — порт для подключения к выбранной ноде через пулер соединений — позволяет снизить нагрузку на PostgreSQL;
5432 — порт для подключения напрямую к процессу PostgreSQL.
Адреса для подключения
Адрес для подключения зависит от подсети кластера и от того, откуда вы подключаетесь.
Вы можете выбрать адрес в зависимости от одного из сценариев:
Подключение к кластеру в публичной подсети
Если кластер в публичной подсети, к нодам можно подключиться по DNS-адресу или IP-адресу из публичной подсети.
Мы рекомендуем подключаться по DNS-адресу. Для DNS-адресов в кластере используется механизм master discovery — адрес привязан к роли ноды, а не к самой ноде.
При недоступности мастера одна из реплик становится новым мастером и адрес переходит на новую ноду вместе с ролью.
При подключении по IP-адресу из публичной подсети механизм master discovery не используется.
Если одна из реплик станет новым мастером, IP-адрес мастера изменится и подключение по старому IP-адресу перестанет работать.
Вы можете посмотреть адрес для подключения в панели управления.
Подключение из приватной подсети к кластеру в приватной подсети
Если вы подключаетесь из приватной подсети к кластеру в приватной подсети, можно использовать DNS-адрес или приватный IP-адрес.
Мы рекомендуем подключаться по DNS-адресу. Для DNS-адресов в кластере используется механизм master discovery — адрес привязан к роли ноды, а не к самой ноде.
При недоступности мастера одна из реплик становится новым мастером и адрес переходит на новую ноду вместе с ролью.
При подключении по приватному IP-адресу механизм master discovery не используется.
Если одна из реплик станет новым мастером, IP-адрес мастера изменится и подключение по старому IP-адресу перестанет работать.
Чтобы подключиться из другой приватной подсети, сначала подключите обе приватные подсети к облачному роутеру .
Вы можете посмотреть адрес для подключения в панели управления.
Подключение из интернета к кластеру в приватной подсети
Если вы подключаетесь к кластеру в приватной подсети из интернета, можно использовать только публичный IP-адрес (Floating IP).
Приватная подсеть должна соответствовать требованиям .
Если подсеть не соответствует требованиям, подготовьте ее для подключения публичного IP-адреса (Floating IP).
Для публичных IP-адресов (Floating IPs) используется механизм master discovery — адрес привязан к роли ноды, а не к самой ноде.
При недоступности мастера одна из реплик становится новым мастером и адрес переходит на новую ноду вместе с ролью.
Вы можете посмотреть адрес для подключения в панели управления.
Посмотреть адрес для подключения
В панели управления в верхнем меню нажмите Продукты и выберите Облачные базы данных .
Откройте вкладку Активные .
Откройте страницу кластера баз данных → вкладка Подключение .
В блоке Адреса для подключения посмотрите адрес.
Подключиться с SSL
Подключение с использованием TLS(SSL)-шифрования обеспечивает безопасное соединение между вашим сервером и кластером баз данных.
Bash
PowerShell
Python
PHP
Go
Node.js
Скачайте корневой сертификат и поместите его в папку ~/.postgresql/:
mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
Подключитесь к кластеру:
psql "host=<host> \
port=<port> \
dbname=<database_name> \
user=<database_user_name> \
sslmode=verify-ca"
Укажите:
В панели управления нажмите Скачать сертификат для скачивания корневого сертификата и поместите его в папку %APPDATA%\postgresql\.
Подключитесь к кластеру:
psql "host=<host> `
port = < port > `
dbname=<database_name> `
user = < database_user_name > `
sslmode=verify-ca"
Укажите:
Скачайте корневой сертификат и поместите его в папку ~/.postgresql/:
mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
Установите библиотеку psycopg2:
pip3 install psycopg2-binary
Используйте пример подключения:
import psycopg2
conn = psycopg2 . connect ( """
host=<host>
dbname=<database_name>
user=<database_user_name>
password=<password>
sslrootcert=<path>
sslmode=verify-ca
port=<port>
""" )
cur = conn . cursor ( )
cur . execute ( 'SELECT 40+2' )
print ( cur . fetchone ( ) )
cur . close ( )
conn . close ( )
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<path> — полный путь до корневого сертификата;
<port> — порт для подключения .
Скачайте корневой сертификат и поместите его в папку ~/.postgresql/:
mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
Установите библиотеку pgsql:
Используйте пример подключения:
<?php
$dbconn = pg_connect ( "
host=<host>
dbname=<database_name>
user=<database_user_name>
password=<password>
sslrootcert=<path>
sslmode=verify-ca
port=<port>
" ) ;
$query = 'SELECT 40 + 2' ;
$result = pg_query ( $query ) ;
$row = pg_fetch_row ( $result ) ;
echo $row [ 0 ] ;
pg_close ( $dbconn ) ;
?>
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<path> — полный путь до корневого сертификата;
<port> — порт для подключения .
Скачайте корневой сертификат и поместите его в папку ~/.postgresql/:
mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
Используйте пример подключения:
package main
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v4"
)
func main ( ) {
connectionString := fmt . Sprintf ( "postgres://%s:%s@%s:<port>/%s?sslmode=verify-ca&sslrootcert=%s" ,
"<database_user_name>" ,
"<password>" ,
"<host>" ,
"<database_name>" ,
"<path>"
)
conn , err := pgx . Connect ( context . Background ( ) , connectionString )
if err != nil {
fmt . Fprintf ( os . Stderr , "Unable to connect to database: %v\n" , err )
os . Exit ( 1 )
}
defer conn . Close ( context . Background ( ) )
var sum int64
err = conn . QueryRow ( context . Background ( ) , "SELECT 40+2" ) . Scan ( & sum )
if err != nil {
fmt . Fprintf ( os . Stderr , "QueryRow failed: %v\n" , err )
os . Exit ( 1 )
}
fmt . Println ( sum )
}
Укажите:
<port> — порт для подключения ;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных;
<path> — полный путь до корневого сертификата.
Скачайте корневой сертификат и поместите его в папку ~/.postgresql/:
mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
Установите библиотеку pg:
Используйте пример подключения:
const fs = require ( 'fs' ) ;
const pg = require ( 'pg' ) ;
const config = {
host : '<host>' ,
port : '<port>' ,
database : '<database_name>' ,
user : '<database_user_name>' ,
password : '<password>' ,
ssl : {
rejectUnauthorized : true ,
ca : fs . readFileSync ( '<path>' ) . toString ( ) ,
} ,
} ;
const client = new pg . Client ( config ) ;
client . connect ( ( error ) => {
if ( error ) throw error ;
} ) ;
client . query ( 'SELECT 40 + 2 AS sum' , ( error , res ) => {
if ( error ) throw error ;
console . log ( res . rows ) ;
client . end ( ) ;
} ) ;
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<port> — порт для подключения ;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<path> — полный путь до корневого сертификата.
Подключиться без SSL
Bash
PowerShell
Python
PHP
Go
Node.js
Откройте CLI.
Подключитесь к кластеру:
psql "host=<host> \
port=<port> \
dbname=<database_name> \
user=<database_user_name> \
sslmode=disable"
Укажите:
Откройте CLI.
Подключитесь к кластеру:
psql "host=<host> `
port = < port > `
dbname=<database_name> `
user = < database_user_name > `
sslmode=disable"
Укажите:
Установите библиотеку psycopg2:
pip3 install psycopg2-binary
Используйте пример подключения:
import psycopg2
conn = psycopg2 . connect ( """
host=<host>
dbname=<database_name>
user=<database_user_name>
password=<password>
port=<port>
""" )
cur = conn . cursor ( )
cur . execute ( 'SELECT 40+2' )
print ( cur . fetchone ( ) )
cur . close ( )
conn . close ( )
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<port> — порт для подключения .
Установите библиотеку pgsql:
Используйте пример подключения:
<?php
$dbconn = pg_connect ( "
host=<host>
dbname=<database_name>
user=<database_user_name>
password=<password>
port=<port>
" ) ;
$query = 'SELECT 40 + 2' ;
$result = pg_query ( $query ) ;
$row = pg_fetch_row ( $result ) ;
echo $row [ 0 ] ;
pg_close ( $dbconn ) ;
?>
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<port> — порт для подключения .
Используйте пример подключения:
package main
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v4"
)
func main ( ) {
connectionString := fmt . Sprintf ( "postgres://%s:%s@%s:<port>/%s" ,
"<database_user_name>" ,
"<password>" ,
"<host>" ,
"<database_name>" ,
)
conn , err := pgx . Connect ( context . Background ( ) , connectionString )
if err != nil {
fmt . Fprintf ( os . Stderr , "Unable to connect to database: %v\n" , err )
os . Exit ( 1 )
}
defer conn . Close ( context . Background ( ) )
var sum int64
err = conn . QueryRow ( context . Background ( ) , "SELECT 40+2" ) . Scan ( & sum )
if err != nil {
fmt . Fprintf ( os . Stderr , "QueryRow failed: %v\n" , err )
os . Exit ( 1 )
}
fmt . Println ( sum )
}
Укажите:
<port> — порт для подключения ;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя;
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<database_name> — имя базы данных.
Установите библиотеку pg:
Используйте пример подключения:
const pg = require ( 'pg' ) ;
const config = {
host : '<host>' ,
port : '<port>' ,
database : '<database_name>' ,
user : '<database_user_name>' ,
password : '<password>' ,
} ;
const client = new pg . Client ( config ) ;
client . connect ( ( error ) => {
if ( error ) throw error ;
} ) ;
client . query ( 'SELECT 40 + 2 AS sum' , ( error , res ) => {
if ( error ) throw error ;
console . log ( res . rows ) ;
client . end ( ) ;
} ) ;
Укажите:
<host> — DNS-адрес или публичный IP-адрес (Floating IP) ноды;
<port> — порт для подключения ;
<database_name> — имя базы данных;
<database_user_name> — имя пользователя базы данных;
<password> — пароль пользователя.