<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

PostgreSQL

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

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

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

Создание баз

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

Image2

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

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

Image3

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

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

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

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

Image8

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

Image1

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

Привилегия

Назначение

SELECT

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

INSERT

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

UPDATE

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

DELETE

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

TRUNCATE

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

CREATE

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

REFERENCES

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

TRIGGER

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

TEMPORARY

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

CREATEDB

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

CREATE_ROLE

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

Расширения

PostgreSQL поддерживает расширения, которые позволяют расширить стандартную функциональность. Ниже представлены расширения, доступные для PostgreSQL:

Название

Описание

amcheck

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

citext

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

pg_repack

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

pg_stat_kcache

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

pg_stat_statements

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

pg_trgm

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

pgcrypto

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

postgis

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

timescaledb

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

uuid-ossp

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

pgvector

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

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

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

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

Пользователь с привилегией 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: один узел принимает все записи (лидер), а остальные получают изменения в асинхронном режиме.

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

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