Вклад Sibedge в развитие Postgres: простая установка PLV8 от Алексея Фадеева

PLV8 (Блог).jpgНа прошедшей недавно конференции PGConf 2022 ведущий .NET-разработчик и Postgres-евангелист Sibedge Алексей Фадеев поделился с коллегами инструментом упрощенной установки расширения PLV8, который, как мы считаем, внесёт свой вклад в развитие профессионального сообщества. Он также подробно рассказал о работе над инструментом и о том, как удалось достичь таких результатов.

Postgres — некоммерческая расширяемая СУБД с открытым кодом. Одним из её расширений является PLV8 — процедурный язык на основе движка V8, который позволяет писать хранимые функции на языке JavaScript внутри базы данных. Уже год мы используем это решение в наших проектах и на практике убедились в том, что оно значительно упрощает разработку для целого ряда задач. PLV8 очень недооценено разработчиками, и главная причина его низкой популярности — сложность сборки, требующая сноровки, много интернет-трафика и места для временных файлов.

В какой-то момент мы решили собирать PLV8 сами, поставлять сборку нашим клиентам и публиковать в свободном доступе. Сначала мы просто выложили бинарные файлы на GitHub. С помощью утилиты Strip размер собранного SO-файла удалось уменьшить в 5 раз — со 152 МБ до 33 МБ. На этом мы не остановились и сделали Docker-образ Postgres с уже установленным PLV8 на основе дистрибутива Debian. Docker-образ тоже захотелось уменьшить, для этого мы решили собрать PLV8 под дистрибутив Alpine. Пришлось изрядно потрудиться, ведь никто до нас этого не делал.

Дело в том, что сборка из исходников происходит с помощью утилиты от Google, несовместимой с Alpine. Однако мы нашли полезный репозиторий, где выложен Docker-файл для сборки движка V8. Этот файл нам очень помог, в итоге расширение PLV8 было успешно собрано под Alpine и заработало. Образ уменьшился со 154 МБ до 85,8 МБ. Для сравнения — размер «чистого» Postgres без PLV8 составляет 77 МБ.

В итоге мы создали общедоступный Docker-образ Postgres с PLV8 и предоставили возможность простой установки любому пользователю. Мы первыми в мире собрали расширение PLV8 под дистрибутив Alpine. За два месяца наш образ скачали с DockerHub более 1000 раз.

Мы выражаем огромную благодарность Алексею Фадееву и гордимся тем, что инженеры Sibedge выступают на международных конференциях, вносят вклад в развитие профессиональных сообществ, помогают коллегам из других компаний повысить эффективность разработки, экономя время и деньги бизнеса! Вы можете совершенно бесплатно скачать наши образы по этой ссылке и использовать их без каких-либо ограничений.

Docker-команды для загрузки:

Версия по умолчанию: docker pull sibedge/postgres-plv8
Версия с сериализацией BigInt: docker pull sibedge/postgres-plv8-bigint

Docker-файлы:

https://github.com/sibedge-llc/plv8-dockerfiles