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


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


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


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


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


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


Теперь вы можете из коробки делать репликацию отдельных таблиц на другие базы.


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


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


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

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


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


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


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


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


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


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 и т.д. Подробно можно прочесть в блоге Роберта Хааса
  • Улучшена производительность физической репликации
  • Hash-индексы стали реплицируемы
  • Поддержка полнотекстового поиска на jsonb колонках
  • SCRAM-аутентификация
  • улучшенная поддержка работы с xml
  • улучшен планировщик запросов при использовании join: если планировщик поймет, что объединенные строки не могут произвести в джойне больше одной строки, то можно не тратить лишнее время на поиск других строк. Примеры запросов можно посмотреть в тестах этого комита

Полный список изменений можно посмотреть здесь.


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


UPDATE. Есть мнение, что система версий не очень. Надо было называть PostgreSQL X, чтобы быть в тренде :)

Комментарии (90)


  1. Focushift
    07.10.2017 20:00
    +4

    таблица партициирована (или как это правильно сказать по-русски?).

    партиционирована?


    1. varanio Автор
      07.10.2017 20:04
      +2

      Я слышал четыре разных варианта )
      партиционирована
      партициирована
      партицирована
      секционирована


      1. Vplusplus
        07.10.2017 20:50
        +6

        секционирована, мне кажется, более точно отражает суть по-русски


        1. Mn0g0kratn0Ub1ennbIyNaGT
          08.10.2017 11:56
          +1

          Компания Postgres Professional использует термин «Секционирование». Думаю, в этом вопросе можно признать их приоритет в русскоязычной терминологии.


        1. win32nipuh
          09.10.2017 13:49

          «суть по-русски»? секционирована, партиционоирована — нужно импортозамещать: расчленена, разделена


      1. andrbars
        09.10.2017 16:32
        +1

        сегментирована?


        1. varanio Автор
          09.10.2017 17:07

          вот, кстати, сегментирование имхо подходит лучше всего

          "… Сегмент

          3. Один из многих однородных члеников тела нек-рых животных, а также один из однородных участков како-го-н. органа (спец.). С. червя.
          ...."


    1. masterspline
      08.10.2017 00:43
      +5

      part — это часть. Поэтому партиционирована — «разделена на части», просто «разделена» или «расчленена» (я за расчлененную таблицу, но, полагаю, что такой термин не приживется).

      Англишизмы повсюду
      Вообще, щас не модно пользоваться великим и могучим — кальки-англишизмы проще, потому используются повсеместно: «засабмитить реквест», «обладать экспертизой» (вместо опыта или знаний), «чатиться на митинге» (вместо трепаться на встрече), «разработать дорожную карту» (вместо плана)…


      1. Ipeacocks
        08.10.2017 00:58
        +1

        Да, они повсюду. Но проблема тут нескольки иная. Если же вместо митинг можно (и нужно) сказать совещание, то для некоторых терминов нет особо технических вариантов. Ну то есть сплит брейн можно назвать разделением мозга, но сомневаюсь что так лучше и вряд ли будет понятнее.


      1. r-moiseev
        08.10.2017 15:12
        +3

        Вот так бывает читаешь русскую документацию, а там какая нибудь расчлененка. И понять не можешь, о чем говорит автор. И какой выход? В скобках указывать что именно имеется ввиду? А смысл тогда переводить.


        Переводить термин можно, когда он уже имеет устойчивый аналог.


        1. Mendel
          08.10.2017 18:43
          +1

          ну есть аналог НЖМД и НГМД. Но это как-то из области «кто знает в чем связь между карандашом и кассетой, тот спинеры не покупает».
          С другой стороны — а откуда им взяться этим «устойчивым аналогам» если их не насаждать с самого начала?
          ИМХО переводить надо в самом начале, когда термин только появляется. Потом поздно уже. Бывало пару раз что бросал русский мануал (ладно, ладно, русскую документацию) и читал в оригинале, только потому что термины переведены и приходится мысленно переводить их обратно а то не понятно.


      1. Nashev
        09.10.2017 11:49

        таки англицизмы ;)


    1. sormon
      08.10.2017 15:25
      +2

      Секционирована, хорошо подходит, всегда использую.


      1. guai
        09.10.2017 13:01
        +1

        пока в тексте не появится еще и «sectioning» :)


    1. batyrmastyr
      09.10.2017 13:45

      Секционирование это, читайте в любых учебниках по базам данных.


  1. Focushift
    07.10.2017 20:15

    так partition, с n на конце, первый вариант.
    Упс, не туда опять.


  1. Corpsee
    07.10.2017 20:39
    +2

    Identity column — это очень хорошо. А как она будет себя вести, если сделать вставку в таблицу с конкретными PK? Как обычная секвенция или счетчик сдвинется самостоятельно?


    1. CherAlexV
      09.10.2017 10:24

      Хороший вопрос.
      А ещё, случаем, не ли такой кучи ограничений, как в Sql Server.
      Типа нельзя сделать для таблицы с identity действие insert… select…
      И т.д.


  1. mihmig
    07.10.2017 20:39
    +1

    Пользуясь случаем, спрошу — какие есть свободные реализации репликации Master-Master?


    1. mrobespierre
      08.10.2017 02:57
      +4

      пользуясь случаем, спрошу — а зачем вам Master-Master?


      1. miolini
        08.10.2017 12:10
        +1

        Например для масштабирования операций на запись.


        1. mrobespierre
          08.10.2017 12:43
          +4

          а можно подробнее? вот например ситуация: есть сервер А, он «мастер», допустим, его сторадж успевает k транзакций на запись в минуту. далее мы добавляем в кластер сервер Б, он тоже «мастер», сторадж у него аналогичный, и нагрузку мы на него даём аналогичную. далее мы наблюдаем падение производительности локальных транзакций на сервере А до ~k/2 (производительность осталась прежней, просто добавилась нагрузка с реплики). это уже масштабирование или нет? я понимаю как master-master помогал в старых версиях mysql (там всё в процессор упиралось), но postgres уже 10 лет назад точно масштабировался на любое количество ядер CPU, так что к нему это не относится.


          1. funca
            08.10.2017 14:26
            +2

            Давно-ли Postgres научился распараллеливать исполнение запроса на несколько ядер, как это делает MySQL?


            1. Envek
              08.10.2017 18:12

              Недавно. С 9.6 начали параллелиться несколько определённых операций в одном запросе, в 10-ке их количество увеличилось.


      1. struvv
        08.10.2017 12:23

        Потому что master slave работает по принципу — отменяй любые запросы на слейв потому что он мешает(!) накатываться wal логу на реплику, либо отставай от мастера все больше


        1. mrobespierre
          08.10.2017 12:56

          а можно пример какой-то или баг-репорт, хочу посмотреть?


          1. struvv
            08.10.2017 13:57

            конечно можно — при выключенном feedback
            забыл-название-ошибки — запрос выполняется долго и мешает накатить wal
            и третья опция — база отстала и отвалилась


            1. mrobespierre
              09.10.2017 03:57

              печаль какая. но как я понимаю, это проявляется или на очень длинных запросах или на тех, чьи данные были удалены с мастера прямо во время запроса на слейв?


              1. struvv
                09.10.2017 09:07
                +1

                На запросах, которые мешают реплике накатывать wal лог. Репликация в постгре это восстановление из аварии, просто бесконечное и wal берётся из мастера. Wal может быть невозможно накатить когда запрос на реплике использует те строки, что уже удалены из мастер, например.


                Проблема возникает как раз тогда, когда нужна реплика — при нагрузке на неё и мастер


    1. Strangerx
      09.10.2017 06:46

      Совсем недавно использовал Bucardo для репликации M-S, но, судя по обилию how-to в интернете, его чаще используют как раз для M-M репликаций.


  1. erwins22
    07.10.2017 20:49
    -3

    поддержка 1с скоро?

    оптимизатор запросов вначале делает отбор для простых условий, а потом для сложных как для 1с?


    1. Envek
      07.10.2017 22:23

      Тут вам дорога к Postgres Professional — у них были специальные сборки для 1С (но 10-ки пока не видать): https://postgrespro.ru/products/1c


      1. yuriybz
        07.10.2017 22:34

        Обещали скоро сделать.


        1. erwins22
          07.10.2017 22:38
          +1

          спасибо.


    1. xRay
      07.10.2017 22:38
      +4

      И 1С опять будет вставлять свои костыли в код PostgreSQL?
      Уж лучше пусть 1С научится работать с PostgreSQL как он есть. И всем будет проще. И PostgreSQL можно будет ставить из официальных пакетов и дистрибутивов. Речь о пакетах для linux.


      1. erwins22
        07.10.2017 22:43
        -5

        тут проблема не платформы, а наследия языка.
        1с изначально не поддерживала работу с версионниками поэтому в постгресс всталяется костыль для поддержки.
        + меняется оптимизатор запросов для более эффективной работы с запросами 1с.

        Переписывать всю платформу из за того, что кто то хочет чистый постгес не думаю что кто то будет.

        Если ошибаюсь, пожалуйста поправьте.


        1. akadone
          08.10.2017 03:10
          +2

          Забавная штука. Архитектура у 1с очень хороша. Помню как на семёрке писал на высоконагруженном сервере toysql оптимизации выигрывая 2-3 раза. В 8, особенно в 8.1 они попытались всё это включить в движок. Но на пол пути у них что-то пошло не так (у меня есть одно большое предположение в лице корпорации из Редмонда, которое «попросило» сделать «не так»). В общем они не стали серьёзно допиливать до практически натива, а решили сделать упор на «кросс-платформенность» где самые красивые цифры у MS server+МSSQL
          Поэтому можно бесплатно поставить Linux Server+ Postgresql, а можно MS server+МSSQL. ПРАКТИЧЕСКИ во всех задачах, кроме 1с первая связка будет производительнее. Но для 1с, даже если вы не верите в теории заговора — вторя будет быстрее.


          1. erwins22
            08.10.2017 09:24

            Последние годы Linux Server+ Postgresql связка сильно отзывчевее.


          1. ievgen
            08.10.2017 11:25

            Поддержу предыдущего комментатора.
            В стиле КО: для настройки и там и там нужны прямые руки.


          1. Kwisatz
            08.10.2017 20:09
            +1

            Я как то раз больше часа пытался объяснить 1с-программисту что такое внешние ключи и зачем они нужны. Как можно назвать хорошей архитектуру где контроль целостности реализован через дикие костыли?


            1. Mendel
              08.10.2017 21:02
              -1

              А зачем нужны внешние ключи? (шутка).
              Нет, ну серьезно. Поиграйтесь их построителем запросов.
              У них архитектура предметно-ориентированная, что имеет свое отражение во внутреннем языке запросов, который суть обычный sql-select со всеми join, unit и т.п., только переведенными на русский. Вот только при более глубоком взгляде — очень много технических деталей скрыто под капотом. Вроде и sql-запросы, но протечек абстракции там меньше. Регистры скрывают свою реализацию, просто логика. У таблиц (документы, справочники и т.п.) есть подтаблицы, т.е. по сути движок неявно добавляет join-ы там где это надо, а мы строим запрос исходя только из бизнес-логики.

              Резюмируя — внешние ключи это конечно очень важно, но… не для одинэсника.
              Я понимаю что мой комментарий будет явно непопулярным в данной теме, но не все люди пишут на ассемблере. Не все пишут sql-запросы. Я например оказавшись в голом окружении сразу пишу себе какой-то простенький ORM. Я не в восторге от всего что сделали 1С, но общее направление у них верное — как можно больше технических деталей скрыть от прикладного разработчика. Ему предметную область понимать… освободите его хоть от технических подробностей).


              1. Kwisatz
                08.10.2017 21:27
                +3

                Философия «каждая кухарка может программировать 1с» у них лежит в основе, но она себя не оправдала.
                Во первых вы явно не сталкивались с глюками транслятора всей этой билеберды в SQL. Было дело мы полгода ждали лечения бага join. Кроме того уж незнаю что они там вытворяют но у меня есть отчетик который на sql выполняется секунду, а в 1с 25 минут. Вы считаете это нормальным?

                «не для одинэсника»: вот потому одинэсники пишут какие то дикие костыли там, где все прочие ставят внешний ключ и не мучаются. А уж какое веселье наступает когда есть несколько табличных частей ссылающихся друг на друга, уухх…
                И уж простите, но их конструктор почти неюзабелен на более менее крупных запросах.

                ЗЫ у меня вообще есть подозрение что 1с более менее работает в крупных компаниях только за счет покрывающих индексов MsSQL
                ЗЫЗЫ по поводу перевода на русский: я незнаю как вам но мне особую боль доставляет вспоминать «объединить» это join или union.


                1. Mendel
                  09.10.2017 10:01

                  Философия «каждая кухарка может программировать 1с» у них лежит в основе, но она себя не оправдала.

                  Еще как оправдала. Покажите мне конкурента у которого другая философия и такой же масштаб клиентской базы (разумеется в их нише). Каждая кухарка здесь не в контексте просто низкого порога вхождения (по аналогии с киллерфичей пхп), а скорее по аналогии с Keyword Driven Testing и прочими подходами когда эксперта в предметной области ставят как можно ближе к коду.
                  Во первых вы явно не сталкивались с глюками транслятора всей этой билеберды в SQL.

                  Не сталкивался, признаюсь. Единственный мой опыт с 1с это поддержка РИБ на 65 удаленных узлов с обменом по фтп, файловым и некоторым самопальным гибридом из файлового и фтп с использованием пхп (да, это была конфигурация «Управление НазваниеОрганаВласти 8.0» и была закрытая, с обменом с базой в главке, а я поддерживал только областную структуру). База была адовая, сделана задней левой. «Разработчик» ориентировался изначально на аналогичную структуру в другой области, но там вообще несоизмеримые масштабы. Я к ним ездил по обмену опытом. Их начальник собирал на совещание всех инспекторов в одном кабинете. А у нас все начальники отделов в актовом зале не помещались. Ну и половины техпроцессов у них не было. Но хочу Вам сказать что хоть я лично и пострадал от «кухарки», но это нисколичко не аргумент против самого концепта. У того же 1с есть не только рядовые «специалисты» (или профессионалы? давно это было), у них есть уровни сертификации для разработки сложных проектов и там вполне вменяемый пипл тусуется. В моем случае это чисто проблема откатинга а не самого 1с. (Ну и конечно же в нашем случае 1с даром не сдался, он мало что решал из задач, зато лицензии таскать на каждое рабочее место..).

                  Я еще раз сделаю акцент — я не защищаю их реализацию, у меня у самого к ней много вопросов. Я просто поддерживаю их идеологию.
                  Кроме того уж незнаю что они там вытворяют но у меня есть отчетик который на sql выполняется секунду, а в 1с 25 минут. Вы считаете это нормальным?

                  Неа. Ненормально. Отчетик сами писали или левый «специалист»? ИМХО большая проблема 1с в том что они в своей сертификации ограничивают франчей снизу, но забывают об ограничении сверху. У них есть требования по минимальной квалификации чтобы лезть под капот, и даже по сути продавать полноценные коробки, но вот ограничения «если ты криворукий нуб без особой бумажки, то даже не пытайся писать собственную конфу или существенно допиливать существующую а то договор расторгнем и штрафов навешаем» — у них нет. И от этого все беды (не все, но многие).
                  вот потому одинэсники пишут какие то дикие костыли там, где все прочие ставят внешний ключ и не мучаются.

                  Неверное сравнение. Правильно так: «вот поэтому одинэсники пишут какие-то костыли там, где все прочие говорят: эй, программист, почему ты такой бестолковый, мне нужно вот эту штучку сложить с вот этой штучкой и распечатать так как требуется в нормативке».
                  И уж простите, но их конструктор почти неюзабелен на более менее крупных запросах.

                  Мы точно об одном и том-же говорим? Возможно я уже путаю терминологию. Я говорю не о query-bilder или объектной форме запроса данных из их скриптов, а о GUI-интерфесе. Он очень удобный и простой, и его возможности уходят далеко за пределы того что способен мысленно объять человек которому нужен такой конструктор. Тем более Если конфигурация делалась руками а не ногами. Я в нем делал трехэтажные запросы без проблем (join над юнионами из join-ов, да, без этого было никак, конфигурация была уж слишком сильно «откатовая»). И переделывал их тоже довольно глубоко в нем. Например спокойно накинуть еще четвертый уровень вложенности с групповыми операциями).
                  Вообще у меня техпроцесс был примерно такой:
                  1) набросать общую структуру в построителе
                  2) дописать мелочи типа сложных условий и т.п. в редакторе запроса (можно и в построителе, но тут уж быстрее руками чем мышкой)
                  3) отладить и отдать эникейщикам
                  4) дальше по обстоятельствам, или тупо выгрузка в эксель с допилкой, или добавляли свои условия, сортировки, группировки, в конструкторе, или я потом собирал полноценную обработку с красивым выводом

                  ЗЫЗЫ по поводу перевода на русский: я незнаю как вам но мне особую боль доставляет вспоминать «объединить» это join или union.

                  Это мне как раз вообще без вазелина вошло. Равно как и их «Если… то ..» и прочее. Буквально недели две на перестройку ушло. Мучения доставляло когда пишешь одновременно и на 1с и на чем-то нормальном, и помногу — были проблемы с клавиатурными автоматизмами, например знаки препинания разные и т.п.
                  Кстати а разве в запросах нельзя писать по нормальному? Насколько я помню скриптовый язык у них можно что анлийские ключевые слова использовать что русские, но не пробовал и не уверен что это касается запросов.


                1. erwins22
                  09.10.2017 22:02

                  А вы УстановитьПривилегированныйРежим(истина) делали?
                  можно ваш код в студию?


          1. Praksitel
            09.10.2017 11:28

            Если кто не в курсе, то 1С можно запустить и с interbase (или как оно сейчас)? По крайней мере, лет 10 назад было можно.


            1. vdasus
              09.10.2017 14:14
              +4

              Я не буду советовать что никогда в жизни не делать. Просто поделюсь своим опытом. В одной достаточно большой, по нашим меркам (вся прибалтика), конторе есть зоопарк легаси, который крутится на интербейзе. «внезапно» база стала сыпаться, сервера стали виснуть и появились иные неприятности. Чего только не пробовали… Меняли сервера, версии, клиентов,…

              Столкнулись с тем, что поддержки нет вообще. Отвечают по пол года в стиле «ничем не можем помочь, даже за деньги». Вызвали «крутого специалиста» из другой страны, которого рекомендуют сами интербейзы. Он посмотрел, сказал что «а фиг его знает почему оно ломается». У него есть какие-то приоритеты в тикетах разработчиков интербейза, но второй год результата ноль.

              Теперь факты — проблемы не решены. Поддержка молчит. Спасаемся сложной системой бакапов-восстановлений каждые 15 минут. И срочно переписываем легаси. Я такого беспредела как поддержка «энтерпраиз уровня» базы не видел нигде и никогда за достаточно богатую айти жизнь. В один прекрасный день база просто перестает отвечать, не восстанавливается. Информации «что, собственно случилось-то?» — нет… Логи более чем бесполезны. Думайте сами стоит ли связываться, но если кто-то сейчас решает «а не выбрать ли мне интербейз для чего-то серьёзного» — полистайте гугль на предмет какие там бывают проблемы, посмотрите на даты этих самых проблем.

              Просто личный опыт, ничего личного. Наболело. Если этот комментарий кто-то прочитает и задумается — возможно я только что спас людей от ранней седины.


              1. Praksitel
                09.10.2017 14:27
                +1

                Думаю, это и стоило подозревать, учитывая, что, после появления мускула и постгреса, интербейз исчез где-то за горизонтом.


        1. Kwisatz
          08.10.2017 20:05

          Нативные запрос работает в десятки раз быстрее чем 1с транслированный в SQL. В самой 1с жуткий бардак, оптимизировать это бесполезно


      1. ievgen
        07.10.2017 23:30

        Пакеты для линукс прекрасно ставятся из репозиторирия postgrespro — за что им низкий поклон. Вот бы ещё наконец для линукс дистрибутивов 1с сделали репозиторий. PeterG есть хоть какая то надежда? А то как то репозиторий для себя одного лениво становится поддерживать. А открыть доступ нельзя — атата за распространение.


      1. Kwisatz
        08.10.2017 20:05

        Я дико извиняюсь, но 1с используют БД чуть ли не как файловое хранилище. Более тупое и примитивное использование хорошей БД и вообразить себе сложно. Им бы сначала научиться использовать составные индексы и внешние ключи.


        1. erwins22
          09.10.2017 23:43

          Составные индексы используются давно и хорошо описаны в документации,
          а какой прирост производительности дают внешние ключи или это фишка нужная для языков неинтегрированных с БД?


          1. Nashev
            10.10.2017 15:58

            Внешние ключи — это защита от дурака (их БД сама рвать не даёт, не допускает делать ссылок в никуда) и немножко само-документированности в БД. И то и другое — вкусно и удобно, хотя в контексте собственного словаря данных на уровне 1С второе несколько теряет актуальность. И да, добавляет накладные расходы на их отработку. Вроде как небольшие.


            1. erwins22
              10.10.2017 19:34

              1. ссылки в никуда часто необходимы во время обменов как временное явление иначе транзакция может стать слишком большой.
              2. 1с по лицензионному соглашению запрещает лезть ручками в базу если работает параллельно 1с. Особенности грязного чтения.

              В общем вы правы. Смысла во внешних ключах нет.


  1. Butylkus
    07.10.2017 22:28
    +1

    Партиционирование… Как насчёт вырезки? Это ж самое правильное и вкусное русское слово!


    1. varanio Автор
      07.10.2017 22:35
      +5

      Нарезка тогда уж


      1. SoulAge
        07.10.2017 23:39
        +1

        Разделка!

        Или филирование! ;)


        1. kalininmr
          08.10.2017 05:44
          +1

          раздел — вполн ттрадиционный перевод для partition/partion


          1. Workanator
            08.10.2017 06:59
            +5

            А как же «разбиение»? Возьмите перевод того же Disk space partitioning — Разбиение диска.


            1. r-moiseev
              08.10.2017 15:32

              Это процесс, а как назвать результат? Разбитый диск?


            1. redmanmale
              09.10.2017 14:11
              -1

              Разметка. Размеченный диск.


          1. batyrmastyr
            09.10.2017 14:03
            +1

            Простите, а что, теорию СУБД уже не преподают или не читает никто? 0_о
            Во всех профильных книгах секционированию посвящают хотя бы маленькую главу.


    1. Butylkus
      08.10.2017 10:09

      Так, ну ладно, «вырезка» слишком будоражит умы =)
      Тогда добавим немного пресмыкающихся: СРЕЗ. Собственно, оно так и есть, и даже вроде как логика аналогичная питону. Дай мне таблицу и я тебе срежу искомый кусок.


  1. F0iL
    07.10.2017 23:33

    Я так понимаю, репликация только в одну сторону работает? То есть что-то типа упомянутого выше master-master, или хотя бы поочередную смену ролей (сегодня publish на первом сервере, а subscribe на втором, завтра меняемся, и чтоб ничего не развалилось при split-brain'е) реализовать не получится?


    1. ievgen
      07.10.2017 23:41

      И опять про postgrespro https://github.com/postgrespro/postgres_cluster
      Со слов Олега Сергеевича, если ничего не путаю, в их коммерческой версии есть и мультимастер для продуктива.


    1. darthunix
      08.10.2017 04:41
      +1

      Ну понятно, что нормального мультимастера пока нет и раньше 12-13 версии pg его ждать глупо. По поводу костыльной реализации мультимастера на базе логической репликации здесь и сейчас… можете попробовать на двух серверах создать родительскую таблицу с двумя партициями. Ключом партицирования будет id сервера. На первом сервере при вставке в родительскую таблицу данные попадут в первую партицию, на втором сервере — во вторую. Первая партиция на втором сервере будет подписана на первую партицию на первом сервере. Вторая партиция на первом сервере будет подписана на вторую на втором. По факту такая конструкция может пережить сплит брейн за счёт того, что данные вносятся на каждом сервере в свою партицию и уникальность им обеспечит id сервера (поэтому конфликтов не возникает). Ну и делать такие вещи есть смысл не через нативное партицирование десятки, а через pathman. Но это так, теория, подобные костыли я не проверял.


  1. Mn0g0kratn0Ub1ennbIyNaGT
    08.10.2017 00:17

    Заодно можно и в Википедии страницу про PostgreSQL обновить :-)


    1. Nashev
      10.10.2017 16:01
      -1

      Спасибо за разрешение. Однако, напоминаю: Википедия: Правьте смело


  1. Pilat
    08.10.2017 00:51

    И как всегда основной вопрос — как перевести термин, а можно ли вообще пользоваться новым механизмом партиций, учитывая его ограничения.


    1. Butylkus
      08.10.2017 14:29

      Можно. И даже нужно. Под мои задачи ограничения не существенны. Мне, например, на данный момент через питон приходится делать выборки по меткам времени, а их может быть неопределённое число, скажем, чуть ли не каждая минута за годовой интервал. Приходится костылить с существенным объёмом данных — выбрать всё согласно некоторому ключу, а потом программно делать срез из большого массива. Теперь я могу решить эту проблему одной строчкой и экономить драгоценную память (для SoC это очень существенно).


  1. skobkin
    08.10.2017 04:07
    +2

    Пробовал 10 версию ещё с беты, в целом приятно, но пока пришлось откатиться на 9.6, т.к. Doctrine DBAL пока не умеет работать с новым видом хранения сиквенсов, а следовательно, ломаются миграции (генерация).


    1. skobkin
      08.10.2017 16:37
      +1

      Если кто-то хочет знать, когда починят, то можно подписаться на этот баг.


  1. ottonturk
    08.10.2017 05:46

    А что надо знать и кем поработать чтобы хорошо разбираться в тех терминах, что описаны для Postgrade? ( секционирование, репликация) — как отойти от среднего уровня — ?
    Это админы учат?


    1. Miron2
      08.10.2017 06:00
      +1

      А Вы скачайте копию и попробуте запустить. Пoтом пройдитесь по пакету контроля качеством,. Помню первые две трети разобрал и многому научился.

      Там огромное количество самых простеньких на вид запросов, пока не наткнетесь на один, который вылетает с ошибкой. Ну и как пройдетесь по цепчке сопровождения дефектов, чтобы понять «почему», считай 50% науки освоили. Потом за каждые оставшиеся 10 придется уже платить сединой. А за последние 10 воюют все профессионалы.

      Ну а там и до репликации доберётесь, если не сами, то если заказчик на проэкте потребует.


  1. Miron2
    08.10.2017 05:47
    +2

    Всё конечно замечательно. Но планируется переход на отечестенные продукты. Есть замечательная база «Линтер», от работы с которой я лично получаю огромное удовольствие последние несколько месяцев.

    Сильной стороной Постгресса была и остается MVCC.

    В конечном итоге, сегодня все производители СУБД вынуждены признать превосходство этой модели и внедрить её поддержку, некоторые после десятков лет вращения пятой точкой.

    Слабым местом была и остается файловая система и регулятор потоков, основанный на мало — экономичной модели Юникса. Хотя появился новый класс задач, для которого сейчас любят, в рекламных целях, использовать слово «облако», эконмичность управления потоками для которого, по крайней мере на сегодня, не существенна, а вот возожность эффективного управления распределением запросов, и гибкость этого управлеия, главное.

    Т. е. процесс внедрения ПО с открытым кодом сегодня находится перед развилкой, где одна команда людей, не боящихся писать на Си системный код может произвести скачек в области восприятия Постгресса.


    1. darthunix
      08.10.2017 07:33
      +3

      Кстати, PostgresPro вроде имеет свой сертифицированный форк. А расскажите про Линтер, что за зверь такой? А то в интернетах про него внятных технических подробностей не нашёл при поверхностном поиске. И раз вы сказали, что сильная сторона pg — это mvcc, то что тогда у Линтера? Блокировщик?


      1. Miron2
        08.10.2017 12:39
        -8

        Скачал пробную копию с узла Релэкс. Выполнил процедуру инсталяции. Нашел учетную запись SYSTEM\MANAGER, и пока гоняю запросы, копирую из тюториал процедуры, запускаю утилиты.Всё это на моих домашних Win — 10.

        Первое и самое яркое впечатление — все запросы отвечают с бешенной скоростью. Как человек с богатым опытом, скорость ответа заметна невооруженным глазом и первый индикатор класса базы.

        Второе, все утилиты работают безупречно. Рабочий стол — конфетка, вылизан дочиста, писать запросы удовольствие. Сравнивая с десятком рабочих столов, от самых дорогих до SQL Workbench My SQL, собранного из исходников GitHub с кастом тулсами собственной добавки, этот самый легкий в общении и никогда не вываливается, от слова «вообще».

        Если делаю ошибки, система отвечает внятными оповещениями. Процесс базы, сервис, выполняется уже несколько месяцев без нареканий. Запуск сервиса происходит молниеносно.

        Отличная документация, отполированная и по содержанию и по презентации. В каждой детали изделия чувствуется класс разработчика.

        Пожалуй самым трудным было добраться до странички чтобы скачать копию. У меня не очень цепкий взгляд и заняло какое — то время оглядеться на узле Релэкс. Но дальше все гладко.

        Такие вот впечатления.

        С Вашего разрешения сегодня позднова — то, посмотрю реализацию управления запросами и отвечу завтра.


        1. AlexWinner
          08.10.2017 19:28
          +2

          > позднова — то
          Боги…


          1. Miron2
            09.10.2017 01:34
            -3

            «Боги…»

            Верующий…


            1. gonzazoid
              09.10.2017 14:11

              Язычник


        1. Miron2
          10.10.2017 08:44

          Вчера найти ответ на Ваш вопрос не удалось. Но в процессе поиска нашел одну интересную фишку «автоматическая индексация данных», задаётся опцией на уровне базы данны в административной утилите.

          Так же обратил внимание на возможность выбора степени предвосхищения конфликтов параллельных потоков при соединении.Можно выбрать между пессимистичным, оптимистичнм и авто — транзакционным подходом управляющего потоками.

          В общем то это надо ещё проанализировать, но складывается впечатление, что эти опии позволяют выбирать между, если не MVCC, то «мягким», «жестки» и по возможности взаимонезависимым распределением структур занятых защитой целостности данных в потоке на уровне клиента. Своеобразный подход, который больше нигде не видел. И потому не обратил внимание.


  1. Forbidden
    08.10.2017 06:19
    +1

    Сидим на pg 10 с 3ей беты на продакшене, в первую очередь из за встроенного партицирования, полет отличный. Печально что логическая репликация не поддерживает репликацию схемы


  1. mva
    08.10.2017 07:21

    Интересно, насколько вероятно что "логическая репликация" сможет сходу заменить skytools… :)


  1. alexdon
    08.10.2017 09:33

    varanio, поправьте ссылку на CREATE PUBLICATION
    www.postgresql.org/docs/10/static/sql-createpublication.html


    1. varanio Автор
      08.10.2017 09:33

      спасибо, поправил


  1. Olehor
    08.10.2017 11:02
    +1

    спасибо автору


  1. romy4
    08.10.2017 15:30
    +1

    Вот не люблю я эти версии Х+1, в них непонятны milestones. Если на разницу 8 и 9 смотрели как вверха на скалу, которую надо забраться, потому что нас ждёт куча новых фич; то между 10 и 11 будет разница неочевидная. И чем плохо было обновление для фиксов с 10.х.1 на 10.х.2 версию?


    1. Mendel
      08.10.2017 20:50

      Когда читал статью думал речь идет о переходе на semver, но после вашего комментария засомневался…


      1. Envek
        08.10.2017 21:52
        +1

        На самом деле теперь нумерация стала ближе к SemVer, а главное — логичней. Старая нумерация: MAJOR1.MAJOR2.PATCH, новая — MAJOR.PATCH. Т.е. 9.6 — это был мажорный релиз после 9.5, несовместимый с ним по формату внутренней структуры файлов БД. Минорных релизов в понимании SemVer у PostgreSQL попросту нет. Цифру MAJOR1 скорее меняли по каким-нибудь праздникам, нежели из соображений обратной совместимости — логика там вроде бы и есть, но она не очень очевидная (так, 9.1 от 9.0 отличалась едва ли не сильнее, чем 9.0 от 8.4, хотя я тогда только начинал работать с постгре и помню плохо). Обратную совместимость поддерживают очень далеко в прошлое (приложению написанному под 8.4 вроде можно и сейчас подсунуть свежий постгрес и всё будет ок).


  1. xclusn
    09.10.2017 19:19
    +1

    Вероятно, будет уместно дополнить эту новость ссылкой на русский перевод документации к PostgreSQL 10:
    postgrespro.ru/docs/postgresql/10


  1. ZOXEXIVO
    10.10.2017 00:39
    +2

    Секционирование осталось старое — основанное на наследовании таблиц, а в релизе просто добавили синтаксический сахар