Истории успеха наших клиентов — лучшие проекты
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

PostgreSQL

PostgreSQL — это объектно-реляционная система управления базами данных с открытым исходным кодом. Она отличается высокой надежностью, масштабируемостью и широкими возможностями: поддержкой JSON, полнотекстовым поиском, хранимыми процедурами, расширениями и прочим.

Вы получаете полностью управляемый кластер PostgreSQL без необходимости ручной настройки — все происходит автоматически.

При создании кластера можно выбрать версию PostgreSQL: 14, 15, 16, 17 или 18.

Создание баз

При создании нового кластера автоматически создается база с именем default_db. Дополнительные базы можно создавать во вкладке «Базы данных» в интерфейсе.

Image2

Импорт базы данных

Для импорта базы данных перейдите во вкладку «Базы данных» в панели управления кластером и нажмите кнопку «Импортировать».

Image 20251023181907180

В открывшемся окне укажите данные для подключения к импортируемой базе данных.

Image 20251023182242899

Для запуска импорта нажмите кнопку «Начать импорт». Статус импорта будет отображаться для базы в разделе «Базы данных».

Во время импорта операции с базами данных не блокируются.

Требования и ограничения

  • Сетевой доступ: исходная база данных должна быть доступна для подключения из подсети 92.53.116.0/24. Без этого импорт не начнется.
  • Уникальность имени: в целевом кластере не должно существовать базы данных с таким же (идентичным) именем.

Что будет перенесено:

  • структура таблиц;
  • индексы;
  • данные в таблицах.

Что не будет перенесено:

  • пользователи и роли;
  • расширения.

Вам необходимо будет создать пользователей и установить необходимые расширения в новой базе данных вручную.

Совместимость версий: импорт поддерживает перенос данных между разными версиями PostgreSQL (например, из 17 в 18). Но, следует учитывать, что некоторые расширения и параметры могут быть несовместимы или иметь отличия в разных версиях.

Пользователи и привилегии

Пользователей можно создавать на вкладке «Пользователи». Для этого нажмите кнопку «Добавить».

Image3

В открывшемся окне задайте имя пользователя и пароль:

  • Имя: от 3 до 64 символов. Допускаются латинские буквы, цифры и спецсимволы.
  • Пароль: от 8 до 30 символов. Допускаются латинские буквы, цифры и спецсимволы.

После создания вы можете настроить привилегии для пользователя.

Чтобы изменить привилегии позже, откройте вкладку «Пользователи», нажмите на три точки рядом с нужным пользователем и выберите пункт «Привилегии».

Image8

В окне настройки выберите необходимые привилегии. Можно задать доступ к конкретной базе или ко всем базам сразу, включив опцию «Одинаковые для всех баз».

Image1

Доступные привилегии

Привилегия

Назначение

SELECT

Чтение данных из таблиц, представлений и последовательностей.

INSERT

Добавление новых строк в таблицы.

UPDATE

Изменение существующих строк в таблицах.

DELETE

Удаление строк из таблиц.

TRUNCATE

Быстрое удаление всех строк из таблицы (без логирования отдельных удалений).

CREATE

Создание новых объектов в базе данных (таблиц, представлений, функций и др.).

REFERENCES

Использование таблицы в качестве внешнего ключа.

TRIGGER

Создание и выполнение триггеров на таблице.

TEMPORARY

Создание временных таблиц в базе данных.

CREATEDB

Создание новых баз данных.

CREATE_ROLE

Создание ролей.

Расширения

PostgreSQL поддерживает расширения, которые позволяют расширить стандартную функциональность — от работы с новыми типами данных до сбора статистики и управления задачами.

Набор доступных расширений может отличаться в разных версиях PostgreSQL.

Ниже представлены расширения, доступные для PostgreSQL:

Название

Описание

amcheck

Проверка целостности индексов и таблиц.

citext

Тип данных для строк без учета регистра.

pg_stat_kcache

Сбор статистики по использованию ресурсов ядра операционной системы.

pg_stat_statements

Сбор и анализ статистики выполнения SQL-запросов.

pg_trgm

Поиск и сравнение строк с использованием триграмм (нечеткий поиск).

pgcrypto

Криптографические функции: хеширование, шифрование, цифровые подписи.

postgis

Работа с географическими и геометрическими данными (GIS).

postgis_topology

Модуль топологии для PostGIS — поддержка работы с топологическими отношениями между объектами.

timescaledb

Хранение и обработка временных рядов с поддержкой масштабируемых вставок и сложных запросов.

uuid-ossp

Генерация UUID различных версий.

pgvector

Тип данных для векторов и методы доступа ivfflat и hnsw для поиска по близости.

pgagent

Планировщик заданий для выполнения SQL-скриптов и shell-команд по расписанию.

Для включения нужного расширения перейдите во вкладку «Конфигурация» и нажмите на кнопку «Изменить» в строке «Расширения».

Image6

Настройка параметров

Вы можете изменить параметры, используемые для PostgreSQL, перейдя во вкладку «Конфигурация» и нажав на кнопку «Изменить параметры» в строке «Параметры базы данных».

Список доступных параметров (нажмите, чтобы развернуть)

Параметр

Допустимые значения

Значение по умолчанию

autovacuum_analyze_scale_factor

От 0 до 100

0.1

autovacuum_max_workers

От 1 до 262143

3

autovacuum_naptime

От 1 до 2147483

60

autovacuum_vacuum_insert_scale_factor

От 0 до 100

0.2

autovacuum_vacuum_scale_factor

От 0 до 100

0.2

autovacuum_work_mem

От -1 до 2147483647

-1

bgwriter_delay

От 10 до 10000

200

bgwriter_lru_maxpages

От 0 до 1073741823

100

deadlock_timeout

От 1 до 2147483647

1000

gin_pending_list_limit

От 64 до 2147483647

4096

idle_in_transaction_session_timeout

От 0 до 2147483647

0

join_collapse_limit

От 1 до 2147483647

8

lock_timeout

От 0 до 2147483647

0

max_prepared_transactions

От 0 до 262143

0

max_connections

От 1 до 262143

200

shared_buffers

От 16 до 1073741823

31232

wal_buffers

От -1 до 262143

2048

temp_buffers

От 100 до 1073741823

1024

work_mem

От 64 до 2147483647

436

default_transaction_isolation

read committed

effective_cache_size

От 1 до 2147483647

524288

max_wal_size

От 2 до 2147483647

1024

min_wal_size

От 2 до 2147483647

80

max_worker_processes

От 0 до 262143

8

max_logical_replication_workers

От 0 до 262143

4

max_parallel_maintenance_workers

От 0 до 1024

2

max_parallel_workers

От 0 до 1024

8

max_parallel_workers_per_gather

От 0 до 1024

2

array_nulls

Включена/Выключена

Включена

backend_flush_after

От 0 до 256

0

backslash_quote

safe_encoding

bgwriter_flush_after

От 0 до 256

64

bgwriter_lru_multiplier

От 1 до 10

2

default_transaction_read_only

Включена/Выключена

Выключена

enable_hashagg

Включена/Выключена

Включена

enable_hashjoin

Включена/Выключена

Включена

enable_incremental_sort

Включена/Выключена

Включена

enable_indexscan

Включена/Выключена

Включена

enable_indexonlyscan

Включена/Выключена

Включена

enable_material

Включена/Выключена

Включена

enable_memoize

Включена/Выключена

Включена

enable_mergejoin

Включена/Выключена

Включена

enable_parallel_append

Включена/Выключена

Включена

enable_parallel_hash

Включена/Выключена

Включена

enable_partition_pruning

Включена/Выключена

Включена

enable_partitionwise_join

Включена/Выключена

Выключена

enable_partitionwise_aggregate

Включена/Выключена

Выключена

enable_seqscan

Включена/Выключена

Включена

enable_sort

Включена/Выключена

Включена

enable_tidscan

Включена/Выключена

Включена

exit_on_error

Включена/Выключена

Выключена

from_collapse_limit

От 1 до 2147483647

8

idle_session_timeout

От 0 до 2147483647

900000

jit

Включена/Выключена

Включена

plan_cache_mode

auto

quote_all_identifiers

Включена/Выключена

Выключена

standard_conforming_strings

Включена/Выключена

Включена

statement_timeout

От 0 до 2147483647

0

timezone

От -13:59 до +14:00

transform_null_equals

Включена/Выключена

Выключена

max_locks_per_transaction

От 1 до 2147483647

64

autovacuum_vacuum_cost_limit

От -1 до 10000

200

checkpoint_timeout

От 30 до 86400

300

checkpoint_completion_target

От 0 до 1

0.5

wal_compression

Включена/Выключена

Выключена

random_page_cost

От 0 до 10

4

effective_io_concurrency

От 0 до 1000

1

log_lock_waits

Включена/Выключена

Выключена

log_temp_files

От -1 до 2147483647

-1

track_io_timing

Включена/Выключена

Выключена

maintenance_work_mem

От 1024 до 2147483647

33554432

Для получения дополнительной информации о параметрах нажмите кнопку «Открыть описание» рядом с нужным параметром.

Image4

Чтобы применить изменения, нажмите кнопку «Применить» внизу страницы.

Подключение к базе

Подключиться к базе можно через встроенный веб-интерфейс — Adminer. Для этого нажмите кнопку «Веб-интерфейс» и выберите Adminer.

Image9

Подключение из терминала

Установите клиент PostgreSQL:

Ubuntu/Debian

sudo apt install postgresql-client

Arch

sudo pacman -S postgresql-libs

Fedora

sudo dnf install postgresql

Существует три способа подключения к кластеру PostgreSQL:

  • по публичному IP;
  • по приватному IP;
  • по домену.

Команду подключения можно скопировать:

  • на вкладке «Дашборд»;

Scr 20250808 Ksbe

  • на вкладке «Подключение».

Scr 20250808 Ksia

При подключении по домену используется защищенное подключение по TLS. В новых кластерах оно включено по умолчанию, в старых — требуется включение вручную. 

Чтобы включить TLS:

  1. Перейдите во вкладку «Подключение».
  2. Нажмите кнопку «Включить защищенное подключение».
  3. Дождитесь завершения настройки.

Scr 20250808 Ktca

После включения TLS для подключения потребуется установить сертификат.

Готовые команды для установки доступны в панели управления, во вкладке «Подключение», для всех популярных операционных систем.

Scr 20250808 Ktps

Чтобы отключить TLS, нажмите кнопку «Выключить защищенное подключение». В появившейся форме подтвердите действие и дождитесь завершения перенастройки базы.

Scr 20251024 Pocy

Создание ролей

Пользователь с привилегией CREATE ROLE может:

  • создавать новых пользователей (CREATE USER);
  • создавать роли (CREATE ROLE);
  • управлять членством в ролях (GRANT ... TO ...).

Создание пользователя

Пользователь — это роль, которой разрешено авторизовываться в базе. Такая роль может подключаться к базе с логином и паролем.

Создать пользователя с паролем можно при помощи запроса:

CREATE USER someuser WITH PASSWORD 'password';

Где someuser — логин пользователя, password — пароль.

Новый пользователь отобразится в панели управления DBaaS через некоторое время после создания.

Scr 20250830 Nmbu

Создание роли и назначение ее пользователю

Вместо того чтобы напрямую раздавать права каждому пользователю, лучше создавать роли с нужными правами, а потом назначать пользователей в эти роли.

Создадим две роли: одна с правами только на чтение, вторая — с правами на чтение и запись.

Роль с правами только на чтение:

CREATE ROLE app_reader;

Роль с правами на чтение и запись:

CREATE ROLE app_writer;

Назначим роль пользователю:

GRANT app_writer TO someuser;

Настройка схемы

По умолчанию все таблицы в PostgreSQL создаются в схеме public. Для выдачи грантов необходимо создать новую схему:

CREATE SCHEMA app_data;

Создадим таблицы и явно укажем новую схему:

CREATE TABLE app_data.users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE app_data.orders (
  id SERIAL PRIMARY KEY,
  user_id INTEGER REFERENCES app_data.users(id),
  order_date TIMESTAMP DEFAULT now()
);

Теперь можем выдать права на схему для ранее созданных ролей:

GRANT USAGE ON SCHEMA app_data TO app_reader;
GRANT USAGE ON SCHEMA app_data TO app_writer;

И право на создание объектов в схеме:

GRANT CREATE ON SCHEMA app_data TO app_writer;

Установка прав на таблицы

Выдадим права на чтение всех существующих таблиц в схеме:

GRANT SELECT ON ALL TABLES IN SCHEMA app_data TO app_reader;

И права на запись:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA app_data TO app_writer;

Настроим права для новых таблиц, которые будут устанавливаться по умолчанию:

ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT SELECT ON TABLES TO app_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;

И права по умолчанию для новых последовательностей:

ALTER DEFAULT PRIVILEGES IN SCHEMA app_data 
GRANT USAGE, SELECT ON SEQUENCES TO app_writer;

Создание дампа

Для создания дампа используйте следующую команду:

pg_dump -x 'postgresql://<user>:<password>@<host>:5432/<db>' | gzip > default_db.sql.gz

Параметр -x (--no-privileges) исключает из дампа команды GRANT и REVOKE, так как назначение прав осуществляется через панель. Без этого флага возможны ошибки при загрузке дампа, хотя они не помешают восстановлению данных.

Загрузка дампа

Для загрузки дампа выполните:

zcat default_db.sql.gz | psql 'postgresql://<user>:<password>@<host>:5432/<db>'

Команда распаковывает дамп и передает его в клиент PostgreSQL для выполнения.

Репликация

Кластеры PostgreSQL в DBaaS используют связку Patroni и Etcd для обеспечения отказоустойчивости. Репликация работает по принципу leader-replica: один узел принимает все записи (лидер), а остальные получают изменения в асинхронном режиме.

В случае сбоя лидера система автоматически переключает роль на одну из реплик, обеспечивая высокую доступность базы данных.

Логи баз данных

Мы собираем и выводим в панель управления логи сервисов баз данных, которые они автоматически генерируют в стандартные файлы логов. Просмотреть их можно на вкладке «Логи».

8aa75574 Ca0d 4400 9675 2308996ef24c

С помощью логов можно быстро отследить возможные ошибки и оперативно на них отреагировать — самостоятельно или обратившись в нашу поддержку.

Для PostgreSQL мы выводим основной лог ошибок (PostgreSQL Log), расположенный по пути /var/log/postgresql/postgresql-<version>-main.log.

Лог полезен для общего мониторинга состояния кластера, диагностики сбоев, анализа подключений и запросов.

Он содержит следующие типы информации:

  • ERROR, FATAL, PANIC: Критические ошибки, приводящие к прерыванию сеанса или работы сервера.

  • WARNING: Предупреждения о потенциальных проблемах.

  • INFO: Общая информация о работе сервера (например, запуск, остановка, контрольные точки).

  • LOG: Стандартные информационные сообщения (например, подключения, завершения длительных транзакций, контрольные точки).

В целях безопасности из всех логов автоматически удаляются записи, содержащие фразы WITH LOGIN PASSWORD или WITH PASSWORD, чтобы исключить возможность утечки паролей.

Сценарии использования

Рассмотрим примеры использования логов на практике. Для удобного поиска информации в логе его можно скачать в формате .txt.

568eeae2 8dc0 41eb Beac 85c758f27e17

Кейс 1: Внезапный рост потребления vCPU

В этом случае нам нужно определить запрос, создающий повышенную нагрузку. Для этого можно проанализировать лог медленных запросов (log_min_duration_statement) и быстро выявить операции, которые выполняются дольше других и активно потребляют процессорные ресурсы. Это позволит оперативно оптимизировать проблемный запрос или добавить недостающий индекс.

Кейс 2: Частые разрывы соединения у приложения

Здесь нам нужно определить причину обрыва подключений к БД. Для этого можно проанализировать лог ошибок и проверить, появляются ли в момент разрыва сообщения уровня FATAL или ERROR. Логи позволяют указать на конкретную причину — например, нехватка памяти, превышение таймаута или лимита подключений. Такой анализ помогает понять, связано ли поведение с сетевыми проблемами, ограничениями ресурсов или ошибками конфигурации.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев