49
PostgreSQL для пользователей Oracle Павел Лузанов [email protected]

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

Embed Size (px)

Citation preview

Page 1: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

PostgreSQL для пользователей Oracle

Павел Лузанов [email protected]

Page 2: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

2

Темы презентации

Импортозамещение в ИТ

Почему PostgreSQL лучше чем Oracle

Миграция с Oracle на PostgreSQL

Page 3: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

3

Темы презентации

Импортозамещение в ИТ

Почему PostgreSQL лучше чем Oracle

Миграция с Oracle на PostgreSQL

Page 4: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

4

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 5: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

5

Таблицы и типы данных

Категории типов данныхЧисловые

Символьные

Бинарные

Дата, время, интервал

Логический тип

Перечисления

Геометрические

Сетевые адреса

Битовые строки

UUID

Типы текстового поиска

XML

JSON, JSONB

Массивы

Составные типы

Диапазоны

Псевдо типы

Домены

Пользовательские типы

Page 6: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

6

Ограничения целостности

Виды ограниченийПервичный ключ (PK)

Уникальный ключ (UK)

Внешний ключ (FK)

Обязательность заполнения (NOT NULL)

Проверка (CHECK)

Проверка значений столбцов для одной строки

Исключения (EXCLUDE)

Проверка значений столбцов для разных строк

Пример. Проверка на пересечение диапазонов

Могут быть отложенными (DEFERRED)

Добавление ограничений без проверки существующих записей (NOT VALID)

Page 7: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

7

Индексы

Уникальные

По выражению (функциональные)

Частичные (WHERE)

Методы индексации

B-tree Оптимален в запросах на равенство и диапазоны (= > <). Используется по умолчанию.

Hash Только для запросов на равенство.

GiST Обобщённое поисковое дерево: R-Tree, RD-Tree, Signature tree и вариации. Поддерживается поиск ближайших соседей (KNN).

SP-GiST Для работы с несбалансированными структурами: K-D-tree, Quadtree

GIN Обобщенный обратный индекс

BRIN (9.5) По диапазонам страниц

Page 8: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

8

Таблицы

ВременныеОтдельная таблица для каждой сессии

Запись в системный каталог

Нежурналируемые (UNLOGGED)Не реплицируются

Содержание не сохраняется при сбое сервера

Наследуемые (INHERITS)

Наследуют все столбцы и ограничения родительской таблицы

При запросе к родительской таблице, данные выбираются также из дочерних

Используются при секционировании

Внешние (fdw)Подключение внешних источников данных

Возможность записи во внешнюю таблицу

Возможность создавать триггеры

Как секции в секционированной таблице (9.5)

Page 9: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

9

Секционирование

РеализацияСекции – это дочерние таблицы, наследуемые (inherits) от родительской таблицы с ограничениями (check) на допустимые значения

Триггер на родительскую таблицу для разнесения DML операций по детальным таблицам

Параметр CONSTRAINT_EXCLUSION=ON

Расширение pg_partman позволяет автоматически управлять секционированием, включая вложенные секции

Секции могут быть внешними таблицами (9.5)Дополнительно

Page 10: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

10

Представления

ОбычныеРеализация через правила (rules)

ВременныеОбновляемые

Ограниченно

МатериализованныеОбновление только через REFRESH MATERIALIZED VIEW

WITH CHECK OPTION

WITH (security_barrier)

Триггеры INSTEAD OF

Page 11: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

11

Последовательности

ОбычныеВременныеФункции: nextval, currval, setvalКэширование значений на уровне сессииТип serial/bigserial — столбец с автоинкрементом

Page 12: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

12

Расширяемость

Встроенная возможность создавать:

Типы данных

Операторы

Индексы и методы доступа

Языки программирования

Функции

Расширения — упаковка связанных объектовCREATE EXTENSION

Page 13: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

13

Примеры расширяемости

Полнотекстовый поиск

Геоинформационные системы

Расширение postgis

NoSQL

key-value, json/jsonb, xml

Page 14: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

14

Системный каталог

Схема pg_catalog

Таблицы, представления, функции

psql -E \d*

Стандарт SQL: information_schema

Page 15: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

15

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 16: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

16

SQL

DML

DDL

DCL

Команды DDL — транзакционные!

Page 17: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

17

Планировщик запросов

Построение планов на основе собранной статистики

Нет подсказок планировщику- есть параметры, влияющие на работу планировщика

- расширение pg_hint_plan

Запрос не может выполняться параллельно - пока

Нет фиксации плана, переноса на другой сервер - в Postgres Pro есть рабочий прототип, идет сбор требований

Page 18: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

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)

Page 19: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

19

Триггеры

Табличныеbefore/after

statement/row

insert, update, delete, truncate

нет мутирующих таблиц

На представление (instead of)

Событийные (CREATE, ALTER, DROP)функционал ограничен

Page 20: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

20

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 21: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

21

Транзакции

Полная реализация ACID

Atomicity, Consistency, Isolation, Durability

Многоверсионность (MVCC)

читатели не блокируют писателей

писатели не блокируют читателей

Все уровни изоляции транзакций

Page 22: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

22

Транзакции

Уровни изоляции транзакций

PostgreSQL Oracle

READ COMMITED READ COMMITED

REPEATABLE READ SERIALIZABLE

SERIALIZABLE -

Page 23: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

23

MVCC. Пример (1)

1

2

3

1

2

3

A. select * from T;сн

имок

таблица T

Page 24: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

24

MVCC. Пример (2)

1

2

3

1

2

3 1

2

3

A. select * from T;сн

имок

таблица T

B. update T set ...;

сним

ок

Page 25: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

25

MVCC. Пример (3)

1

2

3

1a

3a

1

2

3 1a

2

3a

A. select * from T;сн

имок

таблица T

B. update T set ...;

сним

ок

Page 26: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

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 ...;

сним

ок

Page 27: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

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

Page 28: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

28

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 29: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

29

Организация данных

Файлы данных

Журнал опережающей записи (WAL)

нет undo (rollback segments)

Управляющая информация pg_controldata

Page 30: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

30

Организация данных

кластер

базаданных

базаданных

табличноепространство

каталог/ ... файл файл файл файл файл ...

таблицатаблицаобъект

табличноепространство

таблицатаблицаобъект

таблицатаблицаобъект таблицатаблицаобъект

табличноепространство таблицатаблицаобъект

Page 31: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

31

Организация данных

Размер файлов данных по умолчанию 1GBСтраница = блок (по умолчанию 8кб)

Fillfactor (PCTFREE)

TOAST когда для строки 8кб мало

Сжатие данных для столбцов с типом данных переменной длины

Page 32: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

32

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 33: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

33

Процессы и память

OSPostgreSQL

клиент postmaster

postgres(серверный процесс)

fork()

общая память

shared buffers wal buffers clog bufferslocks shared cache invalidation ...

temp bufferssorts, hashescatalog cacheplan cache...

служебныепроцессы

background writerwal writercheckpointerstats collectorautovacuumsysloggerwal archiverwal senderwal receiver

fork()

кэш

Page 34: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

34

Процессы и память

Процессыpostmaster — основной процессbackend — серверный процессutility processes — служебные процессы

ПамятьРазделяемая память: shared_buffersПамять backend (work_mem, max_connections)Кэш операционной системыБиблиотечный кэш — на уровне backend

Page 35: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

35

Экземпляр и БД

Экземпляр системы (память, процессы) обслуживает несколько БД

Табличное пространство может содержать объекты разных БД

Роли, табличные пространства — общие объекты кластера БД

Page 36: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

36

Темы презентации

Реляционные структуры данных

Доступ к данным

Управление транзакциями

Организация хранения данных

Экземпляр системы: процессы, память

Администрирование системы

Page 37: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

37

Пользователи и схемы

Роли: пользователи, группы

Суперпользователи

Схема <> Пользователь

Каждый объект БД имеет: схему, владельца (роль)

Нет синонимов → search_path

Псевдороль PUBLIC, схема PUBLIC

Существенные привилегии по умолчанию

Page 38: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

38

Подключение и безопасность

pg_hba.conf

grant/revoke

Функции: security invoker/security definer

Row Level Security (9.5)

Нет пользовательских профилей

Page 39: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

39

pg_ctl

Утилита управления

Статус, запуск, останов, перезапуск сервера ...

Режимы останова pg_ctl stop -m shutdown-mode

PostgreSQL Oracle

smart normal

fast immediate

immediate abort

Page 40: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

40

psql

Утилита командной строки

Поставляется с сервером

Особенности

AUTOCOMMIT = 'on' (выбор: привычный DML или DDL)

Режимы вывода ($PAGER, \x)

Поддержка readline (история команд, автодополнение)

Команды просмотра системного каталога (\d*)

Page 41: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

41

Графические утилиты

pgAdmin

Инструменты для разработки и администрирования

Page 42: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

42

COPY

Выгрузка данныхCOPY tbl TO ['file'|'program'|stdout] ...

Загрузка данныхCOPY tbl FROM ['file'|'program'|stdin] ...

На клиенте (psql)\COPY ...

Существенно быстрее, чем INSERT

Нет аналога INSERT /*+ APPEND */

Page 43: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

43

pg_dump

Логическое копирование БД

Перенес в другую архитектуру

Переход на новую версию

Восстановление: psql, pg_restore

Возможности

Сжатие данных

Выгрузка и загрузка в несколько потоков

Консистентная выгрузка в несколько потоков

Выгрузка всего кластера: pg_dumpall

Page 44: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

44

Мониторинг

Коллектор статистикиПараметры для настройки

Сброс по требованию

Сторонние расширенияpg_stat_statements: статистика по отдельным запросам

pg_stat_plans: статистика по планам запросов

pg_buffercache: статистика по буферам

pg_stat_qcache: статистика на уровне кэша ОС

...

Плагины к системам мониторингаNagios, Zabbix, Munin, Cacti

Интегрированные системы мониторинга: PoWA (PostgreSQL Workload Analyzer)

OPM (Open PostgreSQL monitoring)

Журнал сервераПараметры для настройки

Ротация журнальных файлов

Page 45: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

45

Резервирование/восстановление

Горячее резервное копированиеpg_basebackup

pg_start_backup(),…, pg_stop_backup()

Восстановление на заданный момент в прошлом (PITR)

Непрерывное архивирование WAL

Инкрементальное резервирование только на уровне файлов(внешняя утилита barman)

Flashback — нет!

Page 46: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

46

Высокая доступность

Файловая/потоковая репликация

Горячий резервный сервер

Синхронная/асинхронная репликация

Каскадная репликация

Репликация с задержкой

Page 47: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

47

Документация

Официальная документация

PostgreSQL Wiki

Исходники

Списки рассылки

Page 48: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

48

Заключение

1. Вы найдете причины, чтобы не использовать PostgreSQL

2. Вы найдете возможности выполнить проект на PostgreSQL

Справедливы оба утверждения

Выбор за вами

Page 49: PostgreSQL для пользователей Oracle - Павел Лузанов, Postgres Professional

49

Контакты

Postgres ProfessionalКурсы по PostgreSQL

Авторизованный учебный центр ФОРС

Для вузов читаем бесплатно

Материалы будут доступны на нашем сайте

Документация на русском языкеwww.postgrespro.ru/doc

Замечания, предложения: [email protected]

[email protected]