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