Код для всех
Программа «Код для всех» создана российским IT-сообществом, чтобы поддержать студентов, желающих внести свой вклад в разработку свободно распространяемого программного обеспечения.
Условия участия и отбора:
- к отбору допускаются только лица старше 18 лет;
- выплата стипендии 60 000 рублей в месяц;
- количество часов в неделю, затрачиваемое на стажировку, согласуется напрямую с ментором после прохождения отбора;
- списки участников, прошедших отбор, будут опубликованы до 20 июля 2022 года.
По вопросам участия в программе Postgres Professional «Код для всех» пишите на info@code4all.ru.
Тема 1
Проективное индексирование слабоструктурированных данных в системе управления базами данных PostgreSQL
Описание
Проективное индексирование JSON позволяет пользователям индексировать только необходимые части JSON дерева, хранящиеся в виде столбцов jsonb. Это может значительно уменьшить размер индекса.
Проективное индексирование может быть реализовано путем использования выражений jsonpath в параметрах opclass. Такие выражения могут состоять из одного простого пути, списка простых путей или даже сложных путей с фильтрами. Пути отвечают за фильтрацию частей по структуре, фильтры -- по значению.
Той же цели можно достичь с помощью функциональных индексов, возможно, множественных. Но они требуют включения немодифицированного индексного выражения в каждый запрос, в то время как проективное индексирование позволяет пользователю использовать произвольные операторы на индексированном столбце, а opclass сам определит, какие запросы он поддерживает.
Вот некоторые задачи, которые необходимо решить:
- Перенести эту функцию в последнюю версию.
- Корректно реализовать все возможные комбинации lax/strict режимов в запросах и параметрах opclass (прототип поддерживает только строгий режим)
- Улучшить покрытие тестов
- Разработать контрольные показатели производительности для сравнения с обычным функциональным/частичным индексированием
- По возможности добавить поддержку фильтров в индексированных путях (в общем случае это кажется трудновыполнимым, так как требует внедрения полноценного механизма доказательства предикатов)
Результат
Патч к PostgreSQL 15, реализующий параметр класса операций, позволяющий использовать проективное индексирование
Ментор
Олег Бартунов, генеральный директор Postgres Professional
Тема 2
Мониторинг статуса выполнения запроса: создание инструмента для отслеживания запросов SELECT, INSERT, UPDATE и DELETE в PostgreSQL
Описание
Придумать и реализовать инструмент для отслеживания статуса и степени выполнения запроса SELECT, INSERT, UPDATE или DELETE. Данный способ мониторинга должен удовлетворять следующим условиям: 1) инструмент реализован в ядре PostgreSQL; 2) минимизированы накладные расходы в случаях использования и не использования инструмента; 3) на основе предоставляемой инструментом информации в течение времени могут быть сделаны выводы о целесообразности продолжения/отмены/исправления интересующего запроса.
Результат
патч к PostgreSQL 15, вносящий данную функциональность.
Ментор
Иван Панченко, заместитель генерального директора Postgres Professional
Тема 3
Фильтрация строк таблиц PostgreSQL при выгрузке в pg_dump.
Описание
Придумать и реализовать способ, делающий выгрузку определенных таблиц в pg_dump частичной (не все строки таблицы, а только часть, определяемая условием, формулируемым в виде SQL WHERE-выражения).
Фильтрация строк должна применяться к произвольному количеству таблиц базы, причем выражения фильтров могут быть различными для различных таблиц.
SQL-выражения фильтров могут быть довольно объемными и многочисленными, потому надо иметь возможность задавать их не только через командную строку, но и через файл.
Результат
патч к PostgreSQL 15, вносящий данную функциональность в pg_dump.
Ментор
Дарья Лепихова, разработчик программного обеспечения Postgres Professional
Тема 4
Частичное искажение (обфускация) данных PostgreSQL при выгрузке в pg_dump.
Описание
Придумать и реализовать способ внесения обфускации в определённые поля определенных таблиц при выгрузке через pg_dump.
Для обфускации должна использоваться некоторая функция, хранящаяся в БД. Функция может быть полиморфна (иметь разные реализации для разных типов входных данных).
Искажаемые поля и имя функции, вызываемой для внесения обфускации, должны указываться в параметрах кpg_dump.
Результат
патч к PostgreSQL 15, вносящий данную функциональность в pg_dump.
Ментор
Дарья Лепихова, разработчик программного обеспечения Postgres Professional
Тема 5
Разбор формата файлов PostgreSQL
Описание
Для работы с бинарными файлами базы Postgres существует инструменты такие как pg_waldump, pg_filedump, pg_pageinspect. Данные инструменты могу работать только с определенной базой данных и имеет ряд своих внутренних ограничений.
С другой стороны, есть инструмент fq (https://github.com/wader/fq), построенный аналогично jq и позволяющий выбирать нужное из бинарных данных с помощью jq запросов. В инструмент уже добавлены популярные форматы файлы, включая архиваторы, видео и аудио кодеки.
Конечная цель задачи - добавить в fq анализатор основных файлов базы Postgres. Главным критерием успешности должно быть работоспособность со всем поддерживаемыми версиями Postgres (с 10 до 15). Минимальным критерием является возможность разбора heap таблиц или индексов.
План: исследовать API инструмента и реализовать разбор формата файлов Postgres.
Результат
патч к fq, позволяющий работать с файлами Postgres
Ментор
Жилин Михаил, руководитель группы производительности PostgresProfessional
Тема 6
Реализовать функцию копирования таблицы из файла, пропускающую строки с ошибками.
Описание
Функционал, реализующий данную фичу - COPY ... FROM ... IGNORE ERRORS, написан:
https://github.com/xhevfx/postgres/commit/a8f4c60034b1595642a7654e2e676a4034948909
Подробнее о нем. Если происходит копирование таблицы из файла /stdin: COPY table FROM intput.txt/stdin IGNORE ERRORS , в которой есть некорректные данные в строках (неверный формат данных, не то количество столбцов и т.д.), то данную строку postgresql не копирует, а пропускает. После обработки всей таблицы, в консоль выводятся номера некорректных строк с описанием ошибок.
Обычный вызов функции COPY FROM сразу после обнаружения неверных данных в таблице, выводил бы ошибку.
Для улучшения производительности функцию необходимо доработать - реализовать ее с помощью блоковых субтранзакций, с размером блока - к примеру, 1000 строк.
Результат
Создать патч для PostgreSQL 15, вносящий данную функциональность.
Ментор
Лепихов Андрей, ведущий разработчик программного обеспечения Postgres Professional