Код для всех
Программа «Код для всех» создана российским IT-сообществом, чтобы поддержать студентов, желающих внести свой вклад в разработку свободно распространяемого программного обеспечения. Подробнее о конкурсе.
Тема 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 частичной (не все строки таблицы, а только часть, определяемая условием, формулируемым в виде SQL WHERE-выражения).
Фильтрация строк должна применяться к произвольному количеству таблиц базы, причем выражения фильтров могут быть различными для различных таблиц.
SQL-выражения фильтров могут быть довольно объемными и многочисленными, потому надо иметь возможность задавать их не только через командную строку, но и через файл.
Результат
патч к 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
Сделать выгрузку в дамп меток безопасности и комментариев к базам данных таким образом, чтобы можно было загрузить этот дамп в базу данных с другим именем.
Описание
Сейчас в pg_dump метки безопасности (поле 'label') выгружаются вместе с именем базы данных. Если затем загрузить такой дамп в базу с другим именем возникнет либо ошибка, так как базы с таким именем может не существовать, либо обновятся метки безопасности неверной базы данных. Это можно сделать например, с помощью нового ключевого слова "CURRENT_DATABASE". Этот и другие возможные способы решения данной проблемы обсуждались в этой ветке: https://www.postgresql.org/message-id/flat/20150710115735.GH26521%40alap3.anarazel.de Ее необходимо изучить и выбрать подходящий вариант.
Результат
патч к PostgreSQL, вносящий данную функциональность в pg_dump/pg_restore.
Ментор
Мельников Антон, разработчик программного обеспечения Postgres Professional
Тема 7
Добавить полное имя объекта к полю 'tag'. Например, для операторов нужно чтобы вместо простого '=' стало '=(integer, integer)'
Описание
Необходимо добавить вывод в pg_dump полного имени объекта в поле "tag". Например, для оператора присваивания вместо '=' должно быть выгружено '=(integer, integer)'. Симметрично в pg_restore должна быть добавлена возможность загрузки таких полных имен.
Результат
патч к PostgreSQL, вносящий данную функциональность в g_dump/pg_restore.
Ментор
Мельников Антон, разработчик программного обеспечения Postgres Professional