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

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

Embed Size (px)

Citation preview

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

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

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

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

2

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

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

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

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

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

3

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

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

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

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

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

4

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

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

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

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

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

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

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

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

5

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

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

Символьные

Бинарные

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

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

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

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

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

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

UUID

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

XML

JSON, JSONB

Массивы

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

Диапазоны

Псевдо типы

Домены

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

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

6

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

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

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

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

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

Проверка (CHECK)

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

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

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

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

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

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

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

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

8

Таблицы

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

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

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

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

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

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

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

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

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

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

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

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

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

9

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

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

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

Параметр CONSTRAINT_EXCLUSION=ON

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

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

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

10

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

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

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

Ограниченно

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

WITH CHECK OPTION

WITH (security_barrier)

Триггеры INSTEAD OF

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

11

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

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

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

12

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

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

Типы данных

Операторы

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

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

Функции

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

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

13

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

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

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

Расширение postgis

NoSQL

key-value, json/jsonb, xml

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

14

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

Схема pg_catalog

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

psql -E \d*

Стандарт SQL: information_schema

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

15

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

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

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

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

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

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

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

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

16

SQL

DML

DDL

DCL

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

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

17

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

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

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

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

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

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

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

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

19

Триггеры

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

statement/row

insert, update, delete, truncate

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

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

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

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

20

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

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

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

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

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

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

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

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

21

Транзакции

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

Atomicity, Consistency, Isolation, Durability

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

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

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

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

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

22

Транзакции

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

PostgreSQL Oracle

READ COMMITED READ COMMITED

REPEATABLE READ SERIALIZABLE

SERIALIZABLE -

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

23

MVCC. Пример (1)

1

2

3

1

2

3

A. select * from T;сн

имок

таблица T

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

24

MVCC. Пример (2)

1

2

3

1

2

3 1

2

3

A. select * from T;сн

имок

таблица T

B. update T set ...;

сним

ок

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

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

28

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

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

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

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

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

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

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

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

29

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

Файлы данных

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

нет undo (rollback segments)

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

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

30

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

кластер

базаданных

базаданных

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

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

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

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

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

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

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

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

31

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

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

Fillfactor (PCTFREE)

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

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

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

32

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

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

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

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

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

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

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

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

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

34

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

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

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

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

35

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

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

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

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

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

36

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

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

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

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

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

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

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

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

37

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

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

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

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

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

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

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

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

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

38

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

pg_hba.conf

grant/revoke

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

Row Level Security (9.5)

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

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

39

pg_ctl

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

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

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

PostgreSQL Oracle

smart normal

fast immediate

immediate abort

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

40

psql

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

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

Особенности

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

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

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

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

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

41

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

pgAdmin

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

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

42

COPY

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

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

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

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

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

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

43

pg_dump

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

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

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

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

Возможности

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

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

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

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

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

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: Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»

45

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

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

pg_start_backup(),…, pg_stop_backup()

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

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

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

Flashback — нет!

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

46

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

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

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

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

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

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

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

47

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

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

PostgreSQL Wiki

Исходники

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

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

48

Заключение

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

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

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

Выбор за вами

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

49

Контакты

Postgres ProfessionalКурсы по PostgreSQL

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

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

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

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

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

[email protected]