PostgreSQL для пользователей Oracle Павел Лузанов p.luzanov@postgrespro.ru
2 Темы презентации Импортозамещение в ИТ Почему PostgreSQL лучше чем Oracle Миграция с Oracle на PostgreSQL
3 Темы презентации Импортозамещение в ИТ Почему PostgreSQL лучше чем Oracle Миграция с Oracle на PostgreSQL
4 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
5 Таблицы и типы данных Категории типов данных Числовые Символьные Бинарные Дата, время, интервал Логический тип Перечисления Геометрические Сетевые адреса Битовые строки UUID Типы текстового поиска XML JSON, JSONB Массивы Составные типы Диапазоны Псевдо типы Домены Пользовательские типы
6 Ограничения целостности Виды ограничений Первичный ключ (PK) Уникальный ключ (UK) Внешний ключ (FK) Обязательность заполнения (NOT NULL) Проверка (CHECK) Проверка значений столбцов для одной строки Исключения (EXCLUDE) Проверка значений столбцов для разных строк Пример. Проверка на пересечение диапазонов Могут быть отложенными (DEFERRED) Добавление ограничений без проверки существующих записей (NOT VALID)
7 Индексы Уникальные По выражению (функциональные) Частичные (WHERE) Методы индексации B-tree Оптимален в запросах на равенство и диапазоны (= > <). Используется по умолчанию. Hash Только для запросов на равенство. GiST Обобщённое поисковое дерево: R-Tree, RD-Tree, Signature tree и вариации. Поддерживается поиск ближайших соседей (KNN). SP-GiST Для работы с несбалансированными структурами: K-D-tree, Quadtree GIN Обобщенный обратный индекс BRIN (9.5) По диапазонам страниц
8 Таблицы Временные Отдельная таблица для каждой сессии Запись в системный каталог Нежурналируемые (UNLOGGED) Не реплицируются Содержание не сохраняется при сбое сервера Наследуемые (INHERITS) Наследуют все столбцы и ограничения родительской таблицы При запросе к родительской таблице, данные выбираются также из дочерних Используются при секционировании Внешние (fdw) Подключение внешних источников данных Возможность записи во внешнюю таблицу Возможность создавать триггеры Как секции в секционированной таблице (9.5)
9 Секционирование Реализация Секции – это дочерние таблицы, наследуемые (inherits) от родительской таблицы с ограничениями (check) на допустимые значения Триггер на родительскую таблицу для разнесения DML операций по детальным таблицам Параметр CONSTRAINT_EXCLUSION=ON Расширение pg_partman позволяет автоматически управлять секционированием, включая вложенные секции Секции могут быть внешними таблицами (9.5) Дополнительно
10 Представления Обычные Реализация через правила (rules) Временные Обновляемые Ограниченно Материализованные Обновление только через REFRESH MATERIALIZED VIEW WITH CHECK OPTION WITH (security_barrier) Триггеры INSTEAD OF
11 Последовательности Обычные Временные Функции: nextval, currval, setval Кэширование значений на уровне сессии Тип serial/bigserial — столбец с автоинкрементом
12 Расширяемость Встроенная возможность создавать: Типы данных Операторы Индексы и методы доступа Языки программирования Функции Расширения — упаковка связанных объектов CREATE EXTENSION
13 Примеры расширяемости Полнотекстовый поиск Геоинформационные системы Расширение postgis NoSQL key-value, json/jsonb, xml
14 Системный каталог Схема pg_catalog Таблицы, представления, функции psql -E d* Стандарт SQL: information_schema
15 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
16 SQL DML DDL DCL Команды DDL — транзакционные!
17 Планировщик запросов Построение планов на основе собранной статистики Нет подсказок планировщику - есть параметры, влияющие на работу планировщика - расширение pg_hint_plan Запрос не может выполняться параллельно - пока Нет фиксации плана, переноса на другой сервер - в Postgres Pro есть рабочий прототип, идет сбор требований
18 Хранимые функции Большой выбор ЯП C, SQL, PL/pgSQL В базовой поставке: PL/Perl, PL/Tcl, PL/Python Дополнительно: PL/Java, PL/PHP, PL/Py, PL/R, PL/R, PL/Ruby, PL/Scheme, PL/sh Интерфейс для подключения новых Только функции, нет пакетов Отдельные схемы для группировки функций Нет зависимостей от объектов БД Есть сторонние расширения Нельзя сделать COMMIT Можно SAVEPOINT .. ROLLBACK TO SAVEPOINT Нет ORA-01555 "Snapshot too old" Нет глобальных переменных (PL/pgSQL)
19 Триггеры Табличные before/after statement/row insert, update, delete, truncate нет мутирующих таблиц На представление (instead of) Событийные (CREATE, ALTER, DROP) функционал ограничен
20 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
21 Транзакции Полная реализация ACID Atomicity, Consistency, Isolation, Durability Многоверсионность (MVCC) читатели не блокируют писателей писатели не блокируют читателей Все уровни изоляции транзакций
22 Транзакции Уровни изоляции транзакций PostgreSQL Oracle READ COMMITED READ COMMITED REPEATABLE READ SERIALIZABLE SERIALIZABLE -
23 MVCC. Пример (1) 1 2 3 1 2 3 A. select * from T; снимок таблица T
24 MVCC. Пример (2) 1 2 3 1 2 3 1 2 3 A. select * from T; снимок таблица T B. update T set ...; снимок
25 MVCC. Пример (3) 1 2 3 1a 3a 1 2 3 1a 2 3a A. select * from T; снимок таблица T B. update T set ...; снимок
26 MVCC. Пример (4) 1 2 3 1a 3a таблица T 2 1a 3a C. VACUUM 1 2 3 1a 2 3a A. select * from T; снимок B. update T set ...; снимок
27 Команды DDL — транзакционные! > select my_func(); 1 > begin; > create or replace function my_func()… > select my_func(); 2 > select my_func(); 1 > commit; > select my_func(); 2
28 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
29 Организация данных Файлы данных Журнал опережающей записи (WAL) нет undo (rollback segments) Управляющая информация pg_controldata
30 Организация данных кластер база данных база данных табличное пространство каталог/ ... файл файл файл файл файл ... таблицатаблицаобъект табличное пространство таблицатаблицаобъект таблицатаблицаобъект таблицатаблицаобъект табличное пространство таблицатаблицаобъект
31 Организация данных Размер файлов данных по умолчанию 1GB Страница = блок (по умолчанию 8кб) Fillfactor (PCTFREE) TOAST когда для строки 8кб мало Сжатие данных для столбцов с типом данных переменной длины
32 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
33 Процессы и память OSPostgreSQL клиент postmaster postgres (серверный процесс) fork() общая память shared buffers wal buffers clog buffers locks shared cache invalidation ... temp buffers sorts, hashes catalog cache plan cache ... служебные процессы background writer wal writer checkpointer stats collector autovacuum syslogger wal archiver wal sender wal receiver fork() кэш
34 Процессы и память Процессы postmaster — основной процесс backend — серверный процесс utility processes — служебные процессы Память Разделяемая память: shared_buffers Память backend (work_mem, max_connections) Кэш операционной системы Библиотечный кэш — на уровне backend
35 Экземпляр и БД Экземпляр системы (память, процессы) обслуживает несколько БД Табличное пространство может содержать объекты разных БД Роли, табличные пространства — общие объекты кластера БД
36 Темы презентации Реляционные структуры данных Доступ к данным Управление транзакциями Организация хранения данных Экземпляр системы: процессы, память Администрирование системы
37 Пользователи и схемы Роли: пользователи, группы Суперпользователи Схема <> Пользователь Каждый объект БД имеет: схему, владельца (роль) Нет синонимов → search_path Псевдороль PUBLIC, схема PUBLIC Существенные привилегии по умолчанию
38 Подключение и безопасность pg_hba.conf grant/revoke Функции: security invoker/security definer Row Level Security (9.5) Нет пользовательских профилей
39 pg_ctl Утилита управления Статус, запуск, останов, перезапуск сервера ... Режимы останова pg_ctl stop -m shutdown-mode PostgreSQL Oracle smart normal fast immediate immediate abort
40 psql Утилита командной строки Поставляется с сервером Особенности AUTOCOMMIT = 'on' (выбор: привычный DML или DDL) Режимы вывода ($PAGER, x) Поддержка readline (история команд, автодополнение) Команды просмотра системного каталога (d*)
41 Графические утилиты pgAdmin Инструменты для разработки и администрирования
42 COPY Выгрузка данных COPY tbl TO ['file'|'program'|stdout] ... Загрузка данных COPY tbl FROM ['file'|'program'|stdin] ... На клиенте (psql) COPY ... Существенно быстрее, чем INSERT Нет аналога INSERT /*+ APPEND */
43 pg_dump Логическое копирование БД Перенес в другую архитектуру Переход на новую версию Восстановление: psql, pg_restore Возможности Сжатие данных Выгрузка и загрузка в несколько потоков Консистентная выгрузка в несколько потоков Выгрузка всего кластера: pg_dumpall
44 Мониторинг Коллектор статистики Параметры для настройки Сброс по требованию Сторонние расширения pg_stat_statements: статистика по отдельным запросам pg_stat_plans: статистика по планам запросов pg_buffercache: статистика по буферам pg_stat_qcache: статистика на уровне кэша ОС ... Плагины к системам мониторинга Nagios, Zabbix, Munin, Cacti Интегрированные системы мониторинга: PoWA (PostgreSQL Workload Analyzer) OPM (Open PostgreSQL monitoring) Журнал сервера Параметры для настройки Ротация журнальных файлов
45 Резервирование/восстановление Горячее резервное копирование pg_basebackup pg_start_backup(),…, pg_stop_backup() Восстановление на заданный момент в прошлом (PITR) Непрерывное архивирование WAL Инкрементальное резервирование только на уровне файлов (внешняя утилита barman) Flashback — нет!
46 Высокая доступность Файловая/потоковая репликация Горячий резервный сервер Синхронная/асинхронная репликация Каскадная репликация Репликация с задержкой
47 Документация Официальная документация PostgreSQL Wiki Исходники Списки рассылки
48 Заключение 1. Вы найдете причины, чтобы не использовать PostgreSQL 2. Вы найдете возможности выполнить проект на PostgreSQL Справедливы оба утверждения Выбор за вами
49 Контакты Postgres Professional Курсы по PostgreSQL Авторизованный учебный центр ФОРС Для вузов читаем бесплатно Материалы будут доступны на нашем сайте Документация на русском языке www.postgrespro.ru/doc Замечания, предложения: edu@postgrespro.ru p.luzanov@postgrespro.ru

Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»