- PVSM.RU - https://www.pvsm.ru -

Вышел PostgreSQL 10

Вышел PostgreSQL 10 - 1

На самом деле прошло уже два дня, но статью на Хабр никто до сих пор не написал, так что придется мне устранять это упущение, что и делаю с удовольствием.

Итак, что же нового в этой версии PostgreSQL?

Во-первых, изменилось само версионирование. До "десятки" мы наблюдали множество минорных версий 9.x, которые выходили примерно раз в год и при этом вносили серьезные, далеко не минорные изменения. Поэтому с версии 10 было принято решение сделать нумерацию 10, 11, 12 и т.д. Кстати, MySQL, похоже пошел по тому же пути, прыгнул с 5.7 на 8.0

Ладно, это всё мелочи, перейдем к существу вопроса

Логическая репликация

Это то, чего все ждали давным-давно. Замена различным расширениям а ля slony (репликация на триггерах) и другим костылям.
Теперь вы можете из коробки делать репликацию отдельных таблиц на другие базы.

Репликация делается с помощью команд CREATE PUBLICATION [1] и CREATE SUBSCRIPTION [1]. Всё достаточно просто.

Понятно, что фича достаточно новая, поэтому на данный момент в логической репликации отсутствуют некоторые фичи.

  • нет репликации схемы/DDL
  • нет репликации сиквенсов
  • не реплицируется команда TRUNCATE

Тем не менее это все равно огромный шаг вперед, в каких-то случаях можно выкинуть slony!

Партиционирование

Если раньше партиции можно было накостылять через наследование таблиц [2], то в десятке появилось для этого встроенное средство [3], которое называется declarative partitioning.

Для этого у главной таблицы добавляется ключевое слово PARTITON BY RANGE (или LIST), которое говорит, что эта таблица партициирована (или как это правильно сказать по-русски?).

У конкретных партиций с помощью выражения PARTITION OF ... FOR VALUES FROM (...) TO (...) задается диапазон их данных.

У партиций есть ряд ограничений, которые стоит иметь в виду, прежде чем использовать на продакшене: Limitations of declarative partitioning in PostgreSQL 10 [4]

Identity columns

Если вкратце, то появилась возможность писать

id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY

вместо

id serial PRIMARY KEY 

Что это дает?
Дело в том, что слово serial — это грубо говоря алиас к конструкции DEFAULT nextval('имя сиквенса'). Т.е. по сути таблица отдельно, сиквенс отдельно. Это бывает удобно, а бывает нет. Например, это приводит к тому, что если вы даете права на вставку в таблицу (GRANT INSERT), вам приходится еще отдельно давать гранты на сиквенс.

Кстати, новая запись соответствует стандарту SQL.

Прочее

  • Улучшился паралеллизм, в частности Parallel Bitmap Heap Scan, Parallel Index Scan, Parallel Merge Join и т.д. Подробно можно прочесть в блоге Роберта Хааса [5]
  • Улучшена производительность физической репликации
  • Hash-индексы стали реплицируемы
  • Поддержка полнотекстового поиска на jsonb колонках
  • SCRAM-аутентификация
  • улучшенная поддержка работы с xml [6]
  • улучшен планировщик запросов при использовании join: если планировщик поймет, что объединенные строки не могут произвести в джойне больше одной строки, то можно не тратить лишнее время на поиск других строк. Примеры запросов можно посмотреть в тестах этого комита [7]

Полный список изменений можно посмотреть здесь: https://wiki.postgresql.org/wiki/New_in_postgres_10 [8]

Если кто-то уже успел попробовать v10 в бою, поделитесь, плиз, своими впечатлениями в комментариях.

Автор: Антон Околелов

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/265108

Ссылки в тексте:

[1] CREATE PUBLICATION: https://www.postgresql.org/docs/10/static/sql-createsubscription.html

[2] наследование таблиц: https://www.postgresql.org/docs/9.6/static/ddl-inherit.html

[3] встроенное средство: https://www.postgresql.org/docs/10/static/ddl-partitioning.html#ddl-partitioning-declarative

[4] Limitations of declarative partitioning in PostgreSQL 10: https://wiki.postgresql.org/wiki/Table_partitioning#Limitations_.28of_declarative_partitioning_in_PostgreSQL_10.29

[5] блоге Роберта Хааса: http://rhaas.blogspot.ru/2017/03/parallel-query-v2.html

[6] поддержка работы с xml: https://blog.2ndquadrant.com/xmltable-intro/

[7] этого комита: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=9c7f5229ad68d7e0e4dd149e3f80257893e404d4

[8] https://wiki.postgresql.org/wiki/New_in_postgres_10: https://wiki.postgresql.org/wiki/New_in_postgres_10

[9] Источник: https://habrahabr.ru/post/339568/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best