В данной статье мы рассмотрим настройку внешнего доступа и подключение к облачной базе данных PostgreSQL с помощью psql, PHP, Python, Go, NodeJS, Java, а также графических IDE DataGrip, DBeaver и pgAdmin4.
Настройка внешнего доступа
Настроить внешний доступ к облачной базе данных вы можете в панели управления, в разделе “Настройки”.

По умолчанию доступ к базе данных разрешен только из приватной сети. Чтобы настроить доступ к базе данных из внешней сети, укажите IP адреса или подсети в формате ip/subnet
в поле “Доступ по внешнему IP-адресу”.
Если необходимо разрешить доступ с любого IP, укажите в поле подсеть 0.0.0.0/0
.
Получение SSL-сертификата
Для подключения к облачной базе данных PostgreSQL через защищенное соединение необходимо установить SSL-сертификат:
mkdir -p ~/.postgresql && \
wget "https://beget.com/cloud-ca.crt" --output-document ~/.postgresql/root.crt && \
chmod 0600 ~/.postgresql/root.crt
Сертификат будет сохранен в файле ~/.postgresql/root.crt
.
mkdir $HOME\.postgresql; curl.exe -o $HOME\.postgresql\root.crt https://beget.com/cloud-ca.crt
Сертификат будет сохранен в файле $HOME\.postgresql\root.crt
.
Для использования графических IDE сохраните сертификат в локальную папку и укажите путь к нему в настройках подключения.
Графические IDE
pgAdmin4
Создайте новое подключение к серверу:
- Выберите в меню Object → Register → Server.
- На вкладке General в поле Name укажите имя, под которым облачный PostgreSQL будет отображаться в интерфейсе pgAdmin 4. Имя может быть любым.
- На вкладке Connection укажите параметры подключения:
- Host name/address — технический домен облачной базы данных PostgreSQL;
- Port — 5432;
- Maintenance database — имя базы данных для подключения;
- Username — имя пользователя, от имени которого выполняется подключение;
- Password — пароль пользователя.
- На вкладке Parameters:
- Установите параметр SSL mode в значение
verify-full
. - Добавьте новый параметр Root certificate и укажите в нем путь к сохраненному файлу SSL-сертификата.
- Установите параметр SSL mode в значение
- Нажмите кнопку Save, чтобы сохранить настройки подключения к серверу.
Облачный PostgreSQL появится в списке серверов в навигационном меню.
DataGrip
- Выберите в меню File → New → Data Source → PostgreSQL.
- Укажите параметры подключения на вкладке General:
- User, Password — имя и пароль пользователя БД;
- URL — строка подключения:
jdbc:postgresql://<технический_домен>:5432>/<имя_БД>
- Нажмите кнопку Download, чтобы загрузить драйвер соединения;
- На вкладке SSH/SSL:
- Включите настройку Use SSL.
- В поле CA file укажите путь к файлу SSL-сертификата для подключения.
- Нажмите кнопку Test Connection для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
- Нажмите кнопку OK, чтобы сохранить источник данных.
DBeaver
- Выберите в меню База данных пункт Новое соединение.
- Выберите из списка БД PostgreSQL.
- Нажмите кнопку Далее.
- Укажите параметры подключения на вкладке Главное:
- Хост — технический домен;
- Порт — 5432;
- База данных — имя БД для подключения;
- В блоке Аутентификация укажите имя и пароль пользователя БД.
- На вкладке SSL:
- Включите настройку Использовать SSL.
- В поле Корневой сертификат укажите путь к сохраненному файлу SSL-сертификата.
- Нажмите кнопку Тест соединения для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
- Нажмите кнопку Готово, чтобы сохранить настройки соединения с БД.
psql и языки программирования
psql
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes postgresql-client
Подключитесь к базе данных:
psql "host=c-<технический_домен> \
port=5432 \
sslmode=disable \
dbname=<имя_БД> \
user=<имя_пользователя> \
target_session_attrs=read-write"
После выполнения команды введите пароль пользователя.
Для проверки успешности подключения выполните запрос:
SELECT version();
Подключитесь к базе данных:
psql "host=c-<технический_домен> \
port=5432 \
sslmode=verify-full \
dbname=<имя_БД> \
user=<имя_пользователя> \
target_session_attrs=read-write"
После выполнения команды введите пароль пользователя.
Для проверки успешности подключения выполните запрос:
SELECT version();
Python
Перед подключением необходимо установить зависимости:
sudo apt update && sudo apt install -y python3 python3-pip && pip3 install psycopg2-binary
В качестве примера используем скрипт connect.py
, который выводит версию PostgreSQL:
import psycopg2
conn = psycopg2.connect("""
host=<FQDN_хоста_PostgreSQL>
port=5432
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
('PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit',)
В качестве примера используем скрипт connect.py
, который выводит версию PostgreSQL:
import psycopg2
conn = psycopg2.connect("""
host=<FQDN_хоста_PostgreSQL>
port=5432
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
('PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit',)
PHP
Перед подключением необходимо установить зависимости:
sudo apt update && sudo apt install --yes php php-pgsql
В качестве примера используем скрипт connect.php
, который выводит версию PostgreSQL:
<?php
$conn = pg_connect("
host=<FQDN_хоста_PostgreSQL>
port=5432
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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
В качестве примера используем скрипт connect.php
, который выводит версию PostgreSQL:
<?php
$conn = pg_connect("
host=<FQDN_хоста_PostgreSQL>
port=5432
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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
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
В качестве примера используем код App.java
(файл необходимо создать в директории project/src/java/com/example
), который выводит версию PostgreSQL:
package com.example;
import java.sql.*;
public class App {
public static void main(String[] args) {
String DB_URL = "jdbc:postgresql://<FQDN_хоста_PostgreSQL>:5432/<имяБД>?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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
В качестве примера используем код App.java
(файл необходимо создать в директории project/src/java/com/example
), который выводит версию PostgreSQL:
package com.example;
import java.sql.*;
public class App {
public static void main(String[] args) {
String DB_URL = "jdbc:postgresql://<FQDN_хоста_PostgreSQL>:5432/<имя_БД>?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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
NodeJS
Перед подключением необходимо установить зависимости:
sudo apt update && sudo apt install --yes nodejs npm && npm install pg
В качестве примера используем скрипт app.js
, который выводит версию PostgreSQL:
"use strict";
const pg = require("pg");
const config = {
connectionString:
"postgres://<имя_пользователя>:<пароль_пользователя>@<FQDN_хоста_PostgreSQL>:5432/<имя_БД>"
};
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();
});
Результат запуска скрипта:
node app.js
{
version: 'PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit'
}
В качестве примера используем скрипт app.js
, который выводит версию PostgreSQL:
"use strict";
const fs = require("fs");
const pg = require("pg");
const config = {
connectionString: "postgres://<имя_пользователя>:<пароль_пользователя>@<FQDN_хоста_PostgreSQL>:5432/<имя_БД>",
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();
});
Результат запуска скрипта:
node app.js
{
version: 'PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit'
}
Go
Перед подключением необходимо установить зависимости:
sudo apt update && sudo apt install --yes golang git && go mod init example && go get github.com/jackc/pgx/v4
В качестве примера используем скрипт connect.go
, который выводит версию PostgreSQL:
package main
import (
"context"
"fmt"
"os"
"github.com/jackc/pgx/v4"
)
const (
host = "<FQDN_хоста_PostgreSQL>"
port = 5432
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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
В качестве примера используем скрипт connect.go
, который выводит версию PostgreSQL:
package main
import (
"context"
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"os"
"github.com/jackc/pgx/v4"
)
const (
host = "<FQDN_хоста_PostgreSQL>"
port = 5432
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,
InsecureSkipVerify: true,
}
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
PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.