SlideShare a Scribd company logo
www.postgrespro.ru
СООБЩЕСТВО POSTGRESQL И
ИНСТРУМЕНТЫ РАЗРАБОТЧИКА
Hacking PostgreSQL
03.03.2016
2
Содержание
1.Как устроено международное
сообщество PostgreSQL
2.Как написать патч (от Proposal до
Commit'а)
3.Инструменты разработчика
4.Как сделать ревью
3
Сообщество PostgreSQL
• The PostgreSQL Global
Development Group (PGDG)
– Основная команда – core team
– Коммитеры – committers
– (Основные) разработчики –
(Major) contributors
• Компании-спонсоры (Postgres
Professional, EnterpriseDB,
2ndQuadrant, Cybertec, CitusDB...)
4
Core team
●
Josh Berkus, USA
●
Peter Eisentraut, USA
●
Magnus Hagander, Sweden
●
Tom Lane, USA
●
Bruce Momjian, USA
●
Dave Page, United Kingdom
5
Open source
• Распространяется свободно
• Лицензия PostgreSQL License –
похожа на BSD
• Исходный код PostgreSQL доступен
на Github
• Документация в открытом доступе
на официальном сайте
– Содержит разделы и для DBA, и
для разработчиков
6
Конференции и встречи
• PGCon в Оттаве (в середине июня)
• PGConf.eu (в конце октября)
• PGConf.ru (в начале февраля)
• Множество локальных
PGConf и PGDay (в течение года)
• #PostgreSQLRussia Meetup (каждый
месяц)
• Семинары Postgres Professional
7
Mailing lists (листы рассылки)
• pgsql-hackers – основной лист для
общения разработчиков
• pgsql-bugs
• pgsql-general
• pgsql-perfomance
• pgsql-novice
• И так далее...
8
Как отправить себе письмо? (1)
1. Перейти по ссылке
2. Выбрать в списке Task пункт Browse The Message
Archives, тыкнуть Go
3. Ввести имя рассылки (pgsql-hackers) в поле Mailing
List, тыкнуть Choose List
4. Ввести собственный почтовый адрес, тыкнуть
Choose Address
5. Напомнить себе пароль
1. Открыть ссылку из письма
2. Подтвердить команду отправки письма с
паролем
3. Найти пароль
9
Как отправить себе письмо? (2)
6. Залогиниться, найти в архиве нужное письмо,
используя ссылки в полях Archive, Thread и т. д.:
10
Как отправить себе письмо? (3)
7. Нажать Mail this message to внизу страницы с
открытым письмом:
11
Правила хорошего тона в
листах рассылки
• Отдельное письмо для новой темы
• Используйте теги и пометки
– PROPOSAL, WIP (Work In
Progress), POC (Proof Of
Concept), PATCH
• Отвечайте в рассылку или
“Ответить всем”
• Цитируйте
12
Правила хорошего тона в
листах рассылки
• Используйте подпись, если
работаете в компании
Hi, hackers!
Bla­bla­bla.
­­
Anastasia Lubennikova
Postgres Professional:
http://www.postgrespro.com
The Russian Postgres Company
13
Правила хорошего тона в
листах рассылки
• Пишите ответ в конце письма
A: Because it reverses the logical flow of
conversation.
Q: Why is top posting frowned upon?
A: Top­posting.
Q: What is the most annoying thing on
usenet and in email?
14
Цикл разработки
• Создание ветки для новой версии
• Commitfests (с июля по март)
• Feature Freeze (середина апреля)
• Alpha-версия
• Тестирование и доработка
• Beta-версия (середина июня)
• Выпуск новой версии PostgreSQL
(середина октября)
15
Commitfests
• Разработчик выкладывает патчи
• Получает обратную связь от
Reviewers
• Автор дорабатывает патч
• Reviewer отмечает патч как готовый
для коммита
• Коммитер добавляет патч в
репозиторий
16
Где найти материалы?
• Документация
• Feature Matrix
• Архивы листов рассылок
• Wiki PostgreSQL
• Блоги о PostgreSQL
• Книги
• Видео докладов с конференций
• README и комментарии к коду
17
Патч
18
Как написать патч
• Идея
• Proposal (предложение)
• Обсуждение
• Разработка
• Ревью
• Принятый патч
19
Идея
• Есть ли готовые решения?
• Это задача из TODO?
• Предыдущие обсуждения в hackers?
• Аналоги в других системах?
• Документация и README
• Исходный код
20
Proposal
• Идея, use case
• Измеримые результаты
• Необходимые изменения
– например, новый синтаксис
• Ссылки на:
– прошлые обсуждения в hackers
– академические статьи
• Вопросы
21
Обсуждение
• Кто-то уже работает над этим
• Подводные камни
• Вопросы реализации
• Предложения
• Это слишком сложно внедрить
• Это никому не нужно =(
Защищайте свою идею!
22
Обсуждение
23
Разработка
• Код
• Отладка
• Тесты
– regression tests
– concurrency tests
– обратная совместимость
• Code style
• Документация
24
С чего начать
●
Поискать по названию функции
●
Включить подробный лог:
• set log_min_messages to debug5;
●
Выполнить запрос
●
Найти место в коде, где
вызываются эти сообщения
●
Исследовать код вокруг
25
Код
26
Отладочный вывод
• elog
elog(LOG,“Server msg”);
elog(NOTICE,“Client expected msg”);
elog(WARNING,“Client unexpected msg”);
elog(ERROR, “Abort transaction”);
●
PL/pgSQL: RAISE DEBUG
●
print.c, outfuncs.c
●
Assert
Assert(some_ptr != NULL);
27
Отладка
• Logfile
• Gdb
– select pg_backend_pid();
pg_backend_pid
­­­­­­­­­­­­­­­­
5140
(1 row)
– sudo gdb ­p 5140
28
Regression tests
• Regression tests
– make check
– vi src/test/regress/regression.diffs
• Добавить новый
– src/test/regress/sql/new.sql
– src/test/regress/expected/new.out
– src/test/regress/serial_schedule
– src/test/regress/parallel_schedule
29
pgbench
• pgbench
• pgbench ­i [option...] [dbname]
• pgbench [option...] [dbname]
• pgbench ­f filename [option...]
[dbname]
30
Buildfarm
• PostgreSQL Buildfarm
• Только после коммита
31
Dataset
• Sample Databases
• Встроенные функции
– random();
– generate_series(start, stop, step);
CREATE TABLE test (id integer, b box);
INSERT INTO test
SELECT x, point(random(), random())
FROM generate_series(1,10) as x;
32
generate_series()
●
Как генерировать распределения
– Uniform distribution (continuous)
– Normal distribution
– Exponential distribution
●
PostgreSQL generate_series() Tricks
●
insert into tbl select p1, p2 from
generate_series(1,2) as p1,
lateral generate_series(1, 10) as p2;
33
Настройки
• postgresql.conf
– SHOW config_file;
– SHOW ALL;
– select * from pg_settings;
• ?
– timing
– x
34
Настройки
• Planner configuration
– SET enable_indexscan=false;
– SET enable_mergejoin=false;
• EXPLAIN
– explain (analyze, buffers) table t;
– explain (analyze, verbose) table t;
– explain (analyze, format xml) table t;
35
Code style
• Выравнивание Tab'ами
• Tab-size = 4
• Без концевых пробелов
• {} на отдельной строке
• Перенос длинных строк
• Объявления переменных в начале
блока
36
Code style
• Комментарии
/*­­­­­­­­­­­­­­­­­­­­­­­
* (___/) комментарий
* (='.'=) со сложным
* (")_(") форматированием
*­­­­­­­­­­­­­­­­­­­­­­­
*/
• src/tools/pgindent
37
Документация
• Комментарии
– объяснить “зачем”, а не “как”
– упомянуть зависимости
• README
– обзор раздела кода
• Документация
– примеры
– предупреждения
38
Патч
• Новое письмо в hackers.
– Ссылка на прошлое обсуждение
– Описание ситуации
– На какой коммит оно ложится
– Тесты и результаты
– Документация
• Прикрепить патч на коммитфест
39
40
Git
●
Working with Git
git clone
git://git.postgresql.org/git/postgresql.git
cd postgresql
git branch my_branch
git checkout my_branch
$EDITOR
git add
git commit ­a
git diff ­­patience master my_branch |
filterdiff ­­format=context > ../my­cool­
feature.patch
41
Git
●
Ежедневная работа с Git
●
Шпаргалка
●
Поиск коммита по изменениям
– git log ­S 'vacuum'
42
IDE / Текстовый редактор
●
Vim. Filestyle
●
Emacs. src/tools/editors
●
Sublime Text. Trailing Spaces
●
KDevelop
●
Eclipse
●
Doxygen*
*только web-интерфейс к коду
43
./configure
●
Installation Procedure
CFLAGS='­O0' CFLAGS='­O2'
или
./configure
­­prefix=$WORKSPACE_PATH/postgres_bin/
­­enable­debug
­­enable­cassert
­­enable­depend
44
Переменные окружения
PATH=”$WORKSPACE_PATH/postgres_bin/bin”
LD_LIBRARY_PATH=
”$WORKSPACE_PATH/postgres_bin/lib”
PGDATA=”$WORKSPACE_PATH/postgres_data”
45
make
●
make ­j4 ­s
●
make install
●
make clean
●
make distclean
46
Установка
●
Installation guide
./configure // не забывайте флаги
make ­j4
make check // временная установка и тесты
su
#make install
#adduser postgres
#mkdir $WORKSPACE_PATH/postgres_data
#chown postgres
$WORKSPACE_PATH/postgres_data
47
Установка
initdb ­D $WORKSPACE_PATH/postgres_data
pg_ctl ­D $WORKSPACE_PATH/postgres_data
­l logfile start
createdb test
psql test
48
Серверные утилиты
●
initdb
– Создание нового кластера баз данных
PostgreSQL
●
pg_ctl
– Инициализация, запуск, останов и управление
сервером PostgreSQL
●
pg_controldata
– Вывод свойств, установленных командой initdb
●
pg_upgrade
– Обновление мажорной версии PostgreSQL
49
Клиентские утилиты
●
psql
– Интерактивный терминал
●
pg_config
– Информация по конфигурационным параметрам
развёрнутого кластера
– BINDIR = /home/anastasia/projects/postgresql_bin/bin
– CONFIGURE = '­­enable­debug' 'CFLAGS=­O0' '­­enable­
depend' '­­enable­cassert' '­­
prefix=/home/anastasia/projects/postgresql_bin/'
– CFLAGS = ­Wall ­Wmissing­prototypes ­Wpointer­arith
­Wdeclaration­after­statement ­Wendif­labels ­Wmissing­
format­attribute ­Wformat­security ­fno­strict­aliasing
­fwrapv ­fexcess­precision=standard ­g ­O0
50
Нам очень нужны ревьюеры!
51
Ревью патча (1)
●
diff format context?
●
Накладывается на мастер?
●
Содержит комментарии,
документацию, тесты?
●
Соответствует принятому стилю?
52
Шпаргалка ревьюера (1)
●
You've accidentally removed an empty line
here.
●
Space removed by mistake.
●
A few of the lines here are over 80 chars.
●
I think this should be explained with a better
comment.
●
The { brace here should be on the next line.
●
Needs 1 more tab so that "15" lines up with
the other numbers.
53
Шпаргалка ревьюера (2)
●
Unfortunately there are several merge
conflicts between your patch and this
commit. Could you rebase the patch.
54
Ревью патча (2)
●
Компилируется?
– --enable-cassert
– --enable-debug
– CFLAGS=O2
●
Собирается?
●
Проходит все регрессионные тесты?
– make check
55
Ревью патча (3)
●
Действительно нужен?
●
Синтаксис соответствует SQL
стандартам или аналогам в других
БД?
●
Работает как заявлено?
●
Вы можете это сломать?
●
Что-то непонятно из комментариев?
●
Что-то стало медленнее?
56
Метод пристального взгляда
●
Посмотреть на код,
взаимодействующий с патчем
57
Примеры хороших ревью
●
Ревью кода, стиля и документации
●
Ревью функциональности
●
Ревью реализации алгоритма
●
Ревью производительности
58
Домашнее задание
●
Прочитать Developer FAQ
●
Подписаться на pgsql-hackers
●
Выбрать патч с текущего
коммитфеста и сделать его review
59
Что можно взять на ревью?
●
●
Bugfix для tsvector: [patch]
●
Bugfix для pgbench: [patch]
●
Пара патчей к jsonb: [1], [2]
●
Патч INCLUDING для B-tree: [patch]
60
Продолжение следует...
●
В следующий раз:
– Как написать расширение
– Как добавить новый тип данных
www.postgrespro.ru
СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?
Hacking PostgreSQL
03.03.2016
hacking@postgrespro.ru

Recommended

Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
Anastasia Lubennikova
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
it-people
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
Nikolay Samokhvalov
 
Postgresql v509
Postgresql v509
luis perez
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
Anastasia Lubennikova
 
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON'2016. Бартунов Олег, Карьера в Open Source
SECON
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Ontico
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
Hacking PostgreSQL. Обзор архитектуры.
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Yandex
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
Nikolay Samokhvalov
 
pgconf 2017 Moscow. Make PostgreSQL from source
pgconf 2017 Moscow. Make PostgreSQL from source
Dmitry Kremer
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
Yandex
 
Scaling PostgreSQL
Scaling PostgreSQL
Дмитрий Васильев
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Postgres
Postgres
Виктор Тыщенко
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 

More Related Content

Similar to 20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разработчика.pdf (20)

История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
Hacking PostgreSQL. Обзор архитектуры.
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Yandex
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
Nikolay Samokhvalov
 
pgconf 2017 Moscow. Make PostgreSQL from source
pgconf 2017 Moscow. Make PostgreSQL from source
Dmitry Kremer
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
Yandex
 
Scaling PostgreSQL
Scaling PostgreSQL
Дмитрий Васильев
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Postgres
Postgres
Виктор Тыщенко
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
Yandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
Vladislav Bezverhiy
 
Hacking PostgreSQL. Обзор архитектуры.
Hacking PostgreSQL. Обзор архитектуры.
Anastasia Lubennikova
 
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Ontico
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Mail.ru Group
 
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
Yandex
 
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
Nikolay Samokhvalov
 
pgconf 2017 Moscow. Make PostgreSQL from source
pgconf 2017 Moscow. Make PostgreSQL from source
Dmitry Kremer
 
Владимир Бородин - PostgreSQL
Владимир Бородин - PostgreSQL
Yandex
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
Alexey Vasiliev
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
CodeFest
 
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Mail.ru Group
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Dmitry Kremer
 

20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разработчика.pdf