- PVSM.RU - https://www.pvsm.ru -
На самом деле прошло уже два дня, но статью на Хабр никто до сих пор не написал, так что придется мне устранять это упущение, что и делаю с удовольствием.
Итак, что же нового в этой версии PostgreSQL?
Во-первых, изменилось само версионирование. До "десятки" мы наблюдали множество минорных версий 9.x, которые выходили примерно раз в год и при этом вносили серьезные, далеко не минорные изменения. Поэтому с версии 10 было принято решение сделать нумерацию 10, 11, 12 и т.д. Кстати, MySQL, похоже пошел по тому же пути, прыгнул с 5.7 на 8.0
Ладно, это всё мелочи, перейдем к существу вопроса
Это то, чего все ждали давным-давно. Замена различным расширениям а ля slony (репликация на триггерах) и другим костылям.
Теперь вы можете из коробки делать репликацию отдельных таблиц на другие базы.
Репликация делается с помощью команд CREATE PUBLICATION [1] и CREATE SUBSCRIPTION [1]. Всё достаточно просто.
Понятно, что фича достаточно новая, поэтому на данный момент в логической репликации отсутствуют некоторые фичи.
Тем не менее это все равно огромный шаг вперед, в каких-то случаях можно выкинуть slony!
Если раньше партиции можно было накостылять через наследование таблиц [2], то в десятке появилось для этого встроенное средство [3], которое называется declarative partitioning.
Для этого у главной таблицы добавляется ключевое слово PARTITON BY RANGE
(или LIST
), которое говорит, что эта таблица партициирована (или как это правильно сказать по-русски?).
У конкретных партиций с помощью выражения PARTITION OF ... FOR VALUES FROM (...) TO (...)
задается диапазон их данных.
У партиций есть ряд ограничений, которые стоит иметь в виду, прежде чем использовать на продакшене: Limitations of declarative partitioning in PostgreSQL 10 [4]
Если вкратце, то появилась возможность писать
id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
вместо
id serial PRIMARY KEY
Что это дает?
Дело в том, что слово serial — это грубо говоря алиас к конструкции DEFAULT nextval('имя сиквенса'). Т.е. по сути таблица отдельно, сиквенс отдельно. Это бывает удобно, а бывает нет. Например, это приводит к тому, что если вы даете права на вставку в таблицу (GRANT INSERT), вам приходится еще отдельно давать гранты на сиквенс.
Кстати, новая запись соответствует стандарту SQL.
Полный список изменений можно посмотреть здесь: 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
Нажмите здесь для печати.