Что нового и полезного в PostgreSQL 9.5
Highload 2015
Илья Космодемьянский
ik@postgresql-consulting.com
Outline
• Как устроены новые релизы PostgreSQL
Outline
• Как устроены новые релизы PostgreSQL
Когда нам обновляться?
Когда фичей X можно будет пользоваться?
Outline
• Как устроены новые релизы PostgreSQL
Когда нам обновляться?
Когда фичей X можно будет пользоваться?
• Очень важные новинки версии 9.5
• Хорошие и полезные улучшения
• Задел на будущее
• Бонусы
Как устроены релизы в PostgreSQL
• http://www.postgresql.org/support/versioning/
• Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.*
• Их стараются выпускать раз в год
• Минорные релизы выпускают чаще, по мере накопления
полезных исправлений в мажорные релизы
• Жизненный цикл релиза – 5 лет, после этого сообщество
”снимает релиз с поддержки” – в него больше не вносятся
исправления
Как устроены релизы в PostgreSQL
• http://www.postgresql.org/support/versioning/
• Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.*
• Их стараются выпускать раз в год
• Минорные релизы выпускают чаще, по мере накопления
полезных исправлений в мажорные релизы
• Жизненный цикл релиза – 5 лет, после этого сообщество
”снимает релиз с поддержки” – в него больше не вносятся
исправления
• Держать в production снятые с поддержки релизы –
смелость, граничащая с безрассудством
Версия 9.5
• 10 июня 2014 - branch 9.4
• Июнь 2014 - Первый Commit Fest для релиза 9.5 (CF1)
• Август 2014 - CF2
• Октябрь 2014 - CF3
• Декабрь 2014 - CF4
• Февраль 2015 - CF5
• Август 2015 - Alpha2
• Октябрь 2015 - Beta1
Версия 9.5
• > 2000 файлов измененено
• > 200 000 строк кода добавлено...
• ...и примерно столько же удалено
• Имеют-ли смысл эти цифры? Имеют, если сравнивать с
предыдущим релизом
Наиболее обсуждаемые фичи PostgreSQL 9.5
• Row level security (RLS)
• SELECT ... FOR UPDATE SKIP LOCKED
• Upsert: INSERT ... ON CONFLICT
Row level security
tt=# ALTER TABLE departments ENABLE ROW LEVEL SECURITY;
ALTER TABLE
postgres=# create policy kgb on departments for all to public
USING (owner = CURRENT_USER) ;
CREATE POLICY
tt=# select * from departments;
id | name | chief | owner
----+-----------------+--------------+---------
1 | первый | майор Пронин | mpronin
3 | Духовного роста | Иван Иванов | ivanov
2 | АХЧ | Вася Пупкен | pupken
(3 rows)
tt=# c - ivanov
You are now connected to database "postgres" as user "ivanov".
postgres=> select * from departments;
id | name | chief | owner
----+-----------------+-------------+--------
3 | Духовного роста | Иван Иванов | ivanov
(1 row)
SELECT ... FOR UPDATE SKIP LOCKED
tt=# SELECT * FROM test FOR UPDATE NOWAIT;
ERROR: could not obtain lock on row in relation "test"
tt=# SELECT * FROM test FOR UPDATE SKIP LOCKED;
id | name
---+--------
1 | test
-- Просто пропускаем те строки, на которые не можем взять блокировку.
-- Очень полезно для всяких простых очередей
Upsert problem: INSERT ... ON CONFLICT
postgres=> insert into tt(name) values (’bar’);
INSERT 0 1
postgres=> select * from tt;
id | name
----+------
1 | foo
2 | bar
(2 rows)
postgres=> insert into tt(id, name) values (2,’buzz’);
ERROR: duplicate key value violates unique constraint "tt_pk"
DETAIL: Key (id)=(2) already exists.
Upsert: INSERT ... ON CONFLICT
postgres=> insert into tt(id, name) values (2,’buzz’)
on conflict do nothing;
INSERT 0 0
postgres=> insert into tt(id, name) values (2,’buzz’)
on conflict(id) do update set name=excluded.name || ’ edited’;
INSERT 0 1
postgres=> select * from tt;
id | name
----+-------------
1 | foo
2 | buzz edited
(2 rows)
Чуть менее маркетинговые, но очень важные фичи
• Новые настройки WAL
• recovery_target_action
• BRIN индексы
• Улучшения производительности
• Расширены OLAP-возможности
Новые настройки WAL
• Было
checkpoint_segments
• Стало
min_wal_size и max_wal_size
Логичней и экономит место
recovery_target_action
• pause
• promote
• shutdown
BRIN индексы
• min/max
• Сильно меньше B-tree
• Предназначены для больших таблиц
• Медленней читать чем B-tree
Когда обновляться?
• Ждем релиза в декабре
• В марте-апреле оцениваем количество и критичность багов
• Летом обновляемся
• (Это не руководство к действию!)
Questions?
ik@postgresql-consulting.com
slides will be available on
http://blog.postgresql-consulting.com

Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Consulting LLC)

  • 1.
    Что нового иполезного в PostgreSQL 9.5 Highload 2015 Илья Космодемьянский ik@postgresql-consulting.com
  • 2.
    Outline • Как устроеныновые релизы PostgreSQL
  • 3.
    Outline • Как устроеныновые релизы PostgreSQL Когда нам обновляться? Когда фичей X можно будет пользоваться?
  • 4.
    Outline • Как устроеныновые релизы PostgreSQL Когда нам обновляться? Когда фичей X можно будет пользоваться? • Очень важные новинки версии 9.5 • Хорошие и полезные улучшения • Задел на будущее • Бонусы
  • 5.
    Как устроены релизыв PostgreSQL • http://www.postgresql.org/support/versioning/ • Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.* • Их стараются выпускать раз в год • Минорные релизы выпускают чаще, по мере накопления полезных исправлений в мажорные релизы • Жизненный цикл релиза – 5 лет, после этого сообщество ”снимает релиз с поддержки” – в него больше не вносятся исправления
  • 6.
    Как устроены релизыв PostgreSQL • http://www.postgresql.org/support/versioning/ • Релизы это 9.2.*, 9.3.*, 9.4.*, 9.5.* • Их стараются выпускать раз в год • Минорные релизы выпускают чаще, по мере накопления полезных исправлений в мажорные релизы • Жизненный цикл релиза – 5 лет, после этого сообщество ”снимает релиз с поддержки” – в него больше не вносятся исправления • Держать в production снятые с поддержки релизы – смелость, граничащая с безрассудством
  • 7.
    Версия 9.5 • 10июня 2014 - branch 9.4 • Июнь 2014 - Первый Commit Fest для релиза 9.5 (CF1) • Август 2014 - CF2 • Октябрь 2014 - CF3 • Декабрь 2014 - CF4 • Февраль 2015 - CF5 • Август 2015 - Alpha2 • Октябрь 2015 - Beta1
  • 8.
    Версия 9.5 • >2000 файлов измененено • > 200 000 строк кода добавлено... • ...и примерно столько же удалено • Имеют-ли смысл эти цифры? Имеют, если сравнивать с предыдущим релизом
  • 9.
    Наиболее обсуждаемые фичиPostgreSQL 9.5 • Row level security (RLS) • SELECT ... FOR UPDATE SKIP LOCKED • Upsert: INSERT ... ON CONFLICT
  • 10.
    Row level security tt=#ALTER TABLE departments ENABLE ROW LEVEL SECURITY; ALTER TABLE postgres=# create policy kgb on departments for all to public USING (owner = CURRENT_USER) ; CREATE POLICY tt=# select * from departments; id | name | chief | owner ----+-----------------+--------------+--------- 1 | первый | майор Пронин | mpronin 3 | Духовного роста | Иван Иванов | ivanov 2 | АХЧ | Вася Пупкен | pupken (3 rows) tt=# c - ivanov You are now connected to database "postgres" as user "ivanov". postgres=> select * from departments; id | name | chief | owner ----+-----------------+-------------+-------- 3 | Духовного роста | Иван Иванов | ivanov (1 row)
  • 11.
    SELECT ... FORUPDATE SKIP LOCKED tt=# SELECT * FROM test FOR UPDATE NOWAIT; ERROR: could not obtain lock on row in relation "test" tt=# SELECT * FROM test FOR UPDATE SKIP LOCKED; id | name ---+-------- 1 | test -- Просто пропускаем те строки, на которые не можем взять блокировку. -- Очень полезно для всяких простых очередей
  • 12.
    Upsert problem: INSERT... ON CONFLICT postgres=> insert into tt(name) values (’bar’); INSERT 0 1 postgres=> select * from tt; id | name ----+------ 1 | foo 2 | bar (2 rows) postgres=> insert into tt(id, name) values (2,’buzz’); ERROR: duplicate key value violates unique constraint "tt_pk" DETAIL: Key (id)=(2) already exists.
  • 13.
    Upsert: INSERT ...ON CONFLICT postgres=> insert into tt(id, name) values (2,’buzz’) on conflict do nothing; INSERT 0 0 postgres=> insert into tt(id, name) values (2,’buzz’) on conflict(id) do update set name=excluded.name || ’ edited’; INSERT 0 1 postgres=> select * from tt; id | name ----+------------- 1 | foo 2 | buzz edited (2 rows)
  • 14.
    Чуть менее маркетинговые,но очень важные фичи • Новые настройки WAL • recovery_target_action • BRIN индексы • Улучшения производительности • Расширены OLAP-возможности
  • 15.
    Новые настройки WAL •Было checkpoint_segments • Стало min_wal_size и max_wal_size Логичней и экономит место
  • 16.
  • 17.
    BRIN индексы • min/max •Сильно меньше B-tree • Предназначены для больших таблиц • Медленней читать чем B-tree
  • 18.
    Когда обновляться? • Ждемрелиза в декабре • В марте-апреле оцениваем количество и критичность багов • Летом обновляемся • (Это не руководство к действию!)
  • 19.
    Questions? ik@postgresql-consulting.com slides will beavailable on http://blog.postgresql-consulting.com