SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Долгожданный релиз pg_pathman
Дмитрий Иванов, Александр Коротков
Так зачем секционировать?
• Управление большими объемами данных
• Быстрые запросы к наиболее используемым секциям
(локальность данных)
• Хранение старых данных на медленных носителях или
отдельных серверах (FDW)
• Pagination без OFFSET + LIMIT
• Ротация данных при помощи секций
• Таблица содержит архивные данные, в последнюю секцию
добавляются новые данные
• Содержимое таблицы должно быть распределено между
дисками или серверами (шардинг)
• Хочется ускорить запросы к определенным срезам данных
Когда нужно секционировать?
Старый добрый метод
CREATE TABLE partitioned (val INT);
CREATE TABLE partitioned_1 (LIKE partitioned INCLUDING ALL)
INHERITS (partitioned);
ALTER TABLE partitioned_1 ADD CHECK (val >= 1 AND val < 100);
Минусы
• Много ручной работы (управление секциями)
• Полный перебор секций при планировании
• Отсутствие оптимизаций во время исполнения
• Нет встроенной поддержки HASH секционирования
• Не копируются foreign keys родителя
• “Интересные” проблемы с ACL (привилегии)
Решение
• Выбрать какое-нибудь расширение для автоматизации
рутины (не решает проблему с планированием)
• Попробовать написать свое :)
pg_pathman - это:
• Поддержка HASH и RANGE секционирования
• Автоматическое + ручное управление секциями
• Улучшенное планирование запросов
• RuntimeAppend - выбор секции во время исполнения
• PartitionFilter - INSERT без триггеров
• Перехват оператора COPY FROM/TO
• Неблокирующее конкурентное секционирование
• Поддержка FDW
Основные элементы API
• Создание секций (add, attach, append, prepend)
• Управление созданными секциями (merge, split, drop)
• Генерация check constraints и триггеров для UPDATE
• Установка обработчиков создания секций
• Представление (view) с информацией о секциях
• Представление (view) с перечнем задач конкурентного
секционирования
• Таблица для хранения опциональных настроек
Этапы выполнения запроса
Parser Rewriter Planner Executor
RuntimeAppend
(узел исполнения)
PartitionFilter
(узел исполнения)
условия WHERE
(исключение секций)
Обработка условий (WHERE)
1. Механизм constraint exclusion в PostgreSQL не упрощает
условия WHERE, которые попадают в секции. Они
передаются “как есть”.
2. pg_pathman упрощает условия WHERE, которые попадают в
каждую конкретную секцию.
3. Рассмотрим, как pg_pathman справляется с этим, на
примере. Пусть данные разбиты на 6 секций по колонке
ts. Каждая секция – один месяц начиная с 01.2016.
SELECT * FROM test WHERE (ts >= '2015-02-01' AND ts < '2015-03-15')
OR (ts >= '2015-05-15' AND ts < '2015-07-01');
OR
AND AND
ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
OR
AND AND
ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
F T T T T T T T M F F F
OR
AND AND
ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
F T T T T T T T M F F F F F F F M T T T T T T T
OR
AND AND
ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
F T T T T T T T M F F F F F F F M T T T T T T T
F F F F M TF T M F F F
OR
AND AND
ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
F T T T T T T T M F F F F F F F M T T T T T T T
F F F F M TF T M F F F
F T M F M T
EXPLAIN SELECT * FROM test WHERE (ts >= '2015-02-01' AND ts < '2015-03-15')
OR (ts >= '2015-05-15' AND ts < '2015-07-01');
QUERY PLAN
--------------------------------------------------------------------------------
Append (cost=0.00..3248.59 rows=0 width=0)
-> Seq Scan on test_2 (cost=0.00..780.20 rows=0 width=0)
-> Index Scan using test_3_ts_idx on test_3 (cost=0.29..767.99 rows=0 width=0)
Index Cond: (ts < '2015-03-15 00:00:00'::timestamp without time zone)
-> Seq Scan on test_5 (cost=0.00..864.40 rows=0 width=0)
Filter: (ts >= '2015-05-15 00:00:00'::timestamp without time zone)
-> Seq Scan on test_6 (cost=0.00..836.00 rows=0 width=0)
(7 rows)
AppendSeqScan
21
28
10
21
14
10
10
14
AppendSeqScan
21
28
10
21
14
10
10
14 [10, 21)
[21, 31)
AppendSeqScan
10
21
14
10
10
14 [10, 21)
[21, 31)
28
21
RuntimeAppend
• Выбирает только те секции, которые подходят под условия
(WHERE) в данный момент времени (на этапе исполнения)
• Умеет вычислять условия с параметрами ($N)
• Побочный эффект: EXPLAIN (без ANALYZE) показывает
всех детей, так как мы должны запланировать все сканы
до стадии исполнения
RuntimeAppendSeqScan
10
21
14
10
10
14 [10, 21)
RuntimeAppendSeqScan
10
21
14
25
27
21
[21, 31)
RuntimeAppendSeqScan
10
21
14
10
10
14 [10, 21)
SELECT * FROM partitioned_table
WHERE id = (SELECT * FROM some_table LIMIT 1);
SELECT * FROM partitioned_table
WHERE id = ANY (SELECT * FROM some_table LIMIT 4);
SELECT * FROM partitioned_table
JOIN some_table USING (id);
Было:
EXPLAIN (COSTS OFF)
INSERT INTO partitioned_table
SELECT generate_series(1, 10), random();
QUERY PLAN
-----------------------------------------
Insert on partitioned_table
-> Subquery Scan on “*SELECT*”
-> Result
(3 rows)
PartitionFilter
Стало:
EXPLAIN (COSTS OFF)
INSERT INTO partitioned_table
SELECT generate_series(1, 10), random();
QUERY PLAN
-----------------------------------------
Insert on partitioned_table
-> Custom Scan (PartitionFilter)
-> Subquery Scan on “*SELECT*”
-> Result
(4 rows)
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
секция #1 [1, 101)
секция #2 [101, 201)
секция #3 [201, 301)
секция #4 [301, 401)
…
(схема партицирования)
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
секция #1 [1, 101)
секция #2 [101, 201)
секция #3 [201, 301)
секция #4 [301, 401)
…
(схема партицирования)
текущая таблица
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
выбранная секция
PartitionFilter
INSERT
SubPlan
(данные)
PartitionFilter
выбранная секция
Плюсы PartitionFilter
• Быстрая вставка данных (сравнимо с обычной таблицей)
• Поддержка предложения RETURNING *
• Как следствие, корректно отображается число
вставленных строк
• Поддержка триггеров
INSERT INTO journal (dt, level, msg)
VALUES ('2016-12-31', random(), 'test')
RETURNING *;
id | dt | level | msg
---------+-----------------------+-------+------
1051202 | 2016-12-31 00:00:00 | 0 | test
(1 row)
INSERT 0 1
COPY journal TO stdout;
1051203 2016-12-31 00:00:00 1 test
COPY journal FROM '/home/dmitry/journal.sql';
PATHMAN COPY 1
SELECT * FROM ONLY journal;
id | dt | level | msg
----+----+-------+-----
(0 rows)
Бенчмарки
CREATE TABLE journal (
id SERIAL PRIMARY KEY ,
dt TIMESTAMP NOT NULL ,
level INTEGER,
msg TEXT);
CREATE INDEX journal_dt_idx ON journal (dt);
/* разбиваем на 366 секций, по 1 на день, затем заполняем данными: */
INSERT INTO journal (dt, level, msg) SELECT g, random() * 6, md5(g:: TEXT)
FROM generate_series( '2016-01-01'::DATE, '2016-12-31'::DATE, '30 seconds') as g;
Бенчмарки - RuntimeAppend
CREATE TABLE rappend_test(
id INT NOT NULL,
val REAL,
comment TEXT);
CREATE INDEX ON rappend_test (id, comment);
/* разбиваем, заполняем данными */
SELECT create_range_partitions( 'rappend_test' , 'id', 1, W, N);
INSERT INTO rappend_test select g, random(), g:: TEXT FROM generate_series(1, (1E8)) AS g;
(500 partitions)
(1000 partitions)
Выводы
• pg_pathman даёт достаточно богатую функциональность. И гораздо
более высокую производительность, чем все другие расширения,
основанные на constraint exclusion.
• pg_pathman’ом можно пользоваться уже сейчас. Мы знаем, что то там,
то тут баги, но реагируем оперативно!
• Декларативный синтаксис будет в 10 (очень надеемся!). Но всех фич
pg_pathman он достигнет (самое раннее) к 11 (2018 г.).
• Как только с декларативным синтаксисом будут решены основные
вопросы, мы будем портировать свои фичи туда.

Weitere ähnliche Inhalte

Was ist angesagt?

12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
Nikolay Samokhvalov
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Ontico
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
tfmailru
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практике
Sveta Smirnova
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данныхHacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
Anastasia Lubennikova
 

Was ist angesagt? (20)

12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Новые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практикеНовые возможности отладки MySQL 5.7 на практике
Новые возможности отладки MySQL 5.7 на практике
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данныхHacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
 
MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.
 
Haskell
HaskellHaskell
Haskell
 
MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.MySQL: Есть ли жизнь после 1 млрд. записей.
MySQL: Есть ли жизнь после 1 млрд. записей.
 
MyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDBMyRocks: табличный движок для MySQL на основе RocksDB
MyRocks: табличный движок для MySQL на основе RocksDB
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQL
 
Делаем очередь поверх Кассандры
Делаем очередь поверх КассандрыДелаем очередь поверх Кассандры
Делаем очередь поверх Кассандры
 

Andere mochten auch

NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Ontico
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
AvitoTech
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
Ontico
 
Performance management lessons learnt / Андрей Дмитриев (JUGRU)
Performance management lessons learnt / Андрей Дмитриев (JUGRU)Performance management lessons learnt / Андрей Дмитриев (JUGRU)
Performance management lessons learnt / Андрей Дмитриев (JUGRU)
Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 

Andere mochten auch (20)

История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий До...
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
 
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
 
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
CREATE INDEX … USING VODKA. VODKA CONNECTING INDEXES, Олег Бартунов, Александ...
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
"High load в условиях ограниченных ресурсов", Олег Бунин
"High load в условиях ограниченных ресурсов", Олег Бунин"High load в условиях ограниченных ресурсов", Олег Бунин
"High load в условиях ограниченных ресурсов", Олег Бунин
 
2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQL2015.07.16 Способы диагностики PostgreSQL
2015.07.16 Способы диагностики PostgreSQL
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
 
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
DCI @ XING - масштабируя бизнес-логику / Борис Тверитнев (XING)
 
Performance management lessons learnt / Андрей Дмитриев (JUGRU)
Performance management lessons learnt / Андрей Дмитриев (JUGRU)Performance management lessons learnt / Андрей Дмитриев (JUGRU)
Performance management lessons learnt / Андрей Дмитриев (JUGRU)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
Как защитить 1 триллион IoT-устройств / Алексей Ермишкин (Virgil Security)
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 

Ähnlich wie Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Postgres Professional)

Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Ontico
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
Ontico
 
СУБД осень 2012 Лекция 2
СУБД осень 2012 Лекция 2СУБД осень 2012 Лекция 2
СУБД осень 2012 Лекция 2
Technopark
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
HighLoad2009
 
поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...
rit2011
 

Ähnlich wie Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Postgres Professional) (20)

SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
 
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLНародные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
СУБД осень 2012 Лекция 2
СУБД осень 2012 Лекция 2СУБД осень 2012 Лекция 2
СУБД осень 2012 Лекция 2
 
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Waits monitoring in PostgreSQL
Waits monitoring in PostgreSQLWaits monitoring in PostgreSQL
Waits monitoring in PostgreSQL
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...
 
Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Oracle how to live without cloud control
Oracle how to live without cloud controlOracle how to live without cloud control
Oracle how to live without cloud control
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Долгожданный релиз pg_pathman 1.0 / Александр Коротков, Дмитрий Иванов (Postgres Professional)

  • 1. Долгожданный релиз pg_pathman Дмитрий Иванов, Александр Коротков
  • 2. Так зачем секционировать? • Управление большими объемами данных • Быстрые запросы к наиболее используемым секциям (локальность данных) • Хранение старых данных на медленных носителях или отдельных серверах (FDW) • Pagination без OFFSET + LIMIT • Ротация данных при помощи секций
  • 3. • Таблица содержит архивные данные, в последнюю секцию добавляются новые данные • Содержимое таблицы должно быть распределено между дисками или серверами (шардинг) • Хочется ускорить запросы к определенным срезам данных Когда нужно секционировать?
  • 4. Старый добрый метод CREATE TABLE partitioned (val INT); CREATE TABLE partitioned_1 (LIKE partitioned INCLUDING ALL) INHERITS (partitioned); ALTER TABLE partitioned_1 ADD CHECK (val >= 1 AND val < 100);
  • 5. Минусы • Много ручной работы (управление секциями) • Полный перебор секций при планировании • Отсутствие оптимизаций во время исполнения • Нет встроенной поддержки HASH секционирования • Не копируются foreign keys родителя • “Интересные” проблемы с ACL (привилегии)
  • 6. Решение • Выбрать какое-нибудь расширение для автоматизации рутины (не решает проблему с планированием) • Попробовать написать свое :)
  • 7. pg_pathman - это: • Поддержка HASH и RANGE секционирования • Автоматическое + ручное управление секциями • Улучшенное планирование запросов • RuntimeAppend - выбор секции во время исполнения • PartitionFilter - INSERT без триггеров • Перехват оператора COPY FROM/TO • Неблокирующее конкурентное секционирование • Поддержка FDW
  • 8. Основные элементы API • Создание секций (add, attach, append, prepend) • Управление созданными секциями (merge, split, drop) • Генерация check constraints и триггеров для UPDATE • Установка обработчиков создания секций • Представление (view) с информацией о секциях • Представление (view) с перечнем задач конкурентного секционирования • Таблица для хранения опциональных настроек
  • 11. Обработка условий (WHERE) 1. Механизм constraint exclusion в PostgreSQL не упрощает условия WHERE, которые попадают в секции. Они передаются “как есть”. 2. pg_pathman упрощает условия WHERE, которые попадают в каждую конкретную секцию. 3. Рассмотрим, как pg_pathman справляется с этим, на примере. Пусть данные разбиты на 6 секций по колонке ts. Каждая секция – один месяц начиная с 01.2016.
  • 12. SELECT * FROM test WHERE (ts >= '2015-02-01' AND ts < '2015-03-15') OR (ts >= '2015-05-15' AND ts < '2015-07-01');
  • 13. OR AND AND ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’
  • 14. OR AND AND ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’ F T T T T T T T M F F F
  • 15. OR AND AND ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’ F T T T T T T T M F F F F F F F M T T T T T T T
  • 16. OR AND AND ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’ F T T T T T T T M F F F F F F F M T T T T T T T F F F F M TF T M F F F
  • 17. OR AND AND ts >= ‘2016-02-01’ ts < ‘2016-03-15’ ts >= ‘2016-05-15’ ts < ‘2016-07-01’ F T T T T T T T M F F F F F F F M T T T T T T T F F F F M TF T M F F F F T M F M T
  • 18. EXPLAIN SELECT * FROM test WHERE (ts >= '2015-02-01' AND ts < '2015-03-15') OR (ts >= '2015-05-15' AND ts < '2015-07-01'); QUERY PLAN -------------------------------------------------------------------------------- Append (cost=0.00..3248.59 rows=0 width=0) -> Seq Scan on test_2 (cost=0.00..780.20 rows=0 width=0) -> Index Scan using test_3_ts_idx on test_3 (cost=0.29..767.99 rows=0 width=0) Index Cond: (ts < '2015-03-15 00:00:00'::timestamp without time zone) -> Seq Scan on test_5 (cost=0.00..864.40 rows=0 width=0) Filter: (ts >= '2015-05-15 00:00:00'::timestamp without time zone) -> Seq Scan on test_6 (cost=0.00..836.00 rows=0 width=0) (7 rows)
  • 22. RuntimeAppend • Выбирает только те секции, которые подходят под условия (WHERE) в данный момент времени (на этапе исполнения) • Умеет вычислять условия с параметрами ($N) • Побочный эффект: EXPLAIN (без ANALYZE) показывает всех детей, так как мы должны запланировать все сканы до стадии исполнения
  • 26. SELECT * FROM partitioned_table WHERE id = (SELECT * FROM some_table LIMIT 1); SELECT * FROM partitioned_table WHERE id = ANY (SELECT * FROM some_table LIMIT 4); SELECT * FROM partitioned_table JOIN some_table USING (id);
  • 27. Было: EXPLAIN (COSTS OFF) INSERT INTO partitioned_table SELECT generate_series(1, 10), random(); QUERY PLAN ----------------------------------------- Insert on partitioned_table -> Subquery Scan on “*SELECT*” -> Result (3 rows) PartitionFilter Стало: EXPLAIN (COSTS OFF) INSERT INTO partitioned_table SELECT generate_series(1, 10), random(); QUERY PLAN ----------------------------------------- Insert on partitioned_table -> Custom Scan (PartitionFilter) -> Subquery Scan on “*SELECT*” -> Result (4 rows)
  • 30. PartitionFilter INSERT SubPlan (данные) PartitionFilter секция #1 [1, 101) секция #2 [101, 201) секция #3 [201, 301) секция #4 [301, 401) … (схема партицирования)
  • 31. PartitionFilter INSERT SubPlan (данные) PartitionFilter секция #1 [1, 101) секция #2 [101, 201) секция #3 [201, 301) секция #4 [301, 401) … (схема партицирования) текущая таблица
  • 34. Плюсы PartitionFilter • Быстрая вставка данных (сравнимо с обычной таблицей) • Поддержка предложения RETURNING * • Как следствие, корректно отображается число вставленных строк • Поддержка триггеров
  • 35. INSERT INTO journal (dt, level, msg) VALUES ('2016-12-31', random(), 'test') RETURNING *; id | dt | level | msg ---------+-----------------------+-------+------ 1051202 | 2016-12-31 00:00:00 | 0 | test (1 row) INSERT 0 1
  • 36. COPY journal TO stdout; 1051203 2016-12-31 00:00:00 1 test COPY journal FROM '/home/dmitry/journal.sql'; PATHMAN COPY 1 SELECT * FROM ONLY journal; id | dt | level | msg ----+----+-------+----- (0 rows)
  • 37. Бенчмарки CREATE TABLE journal ( id SERIAL PRIMARY KEY , dt TIMESTAMP NOT NULL , level INTEGER, msg TEXT); CREATE INDEX journal_dt_idx ON journal (dt); /* разбиваем на 366 секций, по 1 на день, затем заполняем данными: */ INSERT INTO journal (dt, level, msg) SELECT g, random() * 6, md5(g:: TEXT) FROM generate_series( '2016-01-01'::DATE, '2016-12-31'::DATE, '30 seconds') as g;
  • 38.
  • 39.
  • 40.
  • 41.
  • 42. Бенчмарки - RuntimeAppend CREATE TABLE rappend_test( id INT NOT NULL, val REAL, comment TEXT); CREATE INDEX ON rappend_test (id, comment); /* разбиваем, заполняем данными */ SELECT create_range_partitions( 'rappend_test' , 'id', 1, W, N); INSERT INTO rappend_test select g, random(), g:: TEXT FROM generate_series(1, (1E8)) AS g;
  • 45. Выводы • pg_pathman даёт достаточно богатую функциональность. И гораздо более высокую производительность, чем все другие расширения, основанные на constraint exclusion. • pg_pathman’ом можно пользоваться уже сейчас. Мы знаем, что то там, то тут баги, но реагируем оперативно! • Декларативный синтаксис будет в 10 (очень надеемся!). Но всех фич pg_pathman он достигнет (самое раннее) к 11 (2018 г.). • Как только с декларативным синтаксисом будут решены основные вопросы, мы будем портировать свои фичи туда.