SlideShare a Scribd company logo
www.postgrespro.ru
СОВЕТЫ ДЛЯ
РАЗРАБОТЧИКОВ
POSTGRESQL
Анастасия Лубенникова
a.lubennikova@postgrespro.ru
2
Содержание
• Как устроено международное
сообщество PostgreSQL
• Как написать патч (от Proposal до
Commit'а)
• Инструменты разработчика
3
Мотивация
• Изучение PostgreSQL
• Создание материала для обучения
новых разработчиков
• Шпаргалка и чек-лист для себя
• Обмен опытом
*Подчеркнутый текст – это ссылки
4
Содержание
• Как устроено международное
сообщество PostgreSQL
• Как написать патч (от Proposal до
Commit'а)
• Инструменты разработчика
5
6
Сообщество PostgreSQL
• The PostgreSQL Global
Development Group (PGDG)
– Основная команда – core team
– Коммитеры – commiters
– (Основные) разработчики –
(Major) contributors
• Компании-спонсоры (Postgres
Professional, EnterpriseDB,
2ndQuadrant, Cybertec...)
7
Open source
• Распространяется свободно
• Лицензия PostgreSQL License –
похожа на BSD
• Исходный код PostgreSQL доступен
на Github
• Документация в открытом доступе
на официальном сайте
– Содержит разделы и для DBA, и
для разработчиков
8
Конференции и встречи
• PGCon в Оттаве (в середине июня)
• PGConf.eu (в конце октября)
• PGConf.ru (в начале февраля)
• Множество локальных
PGConf и PGDay (в течение года)
• #PostgreSQLRussia Meetup (каждый
месяц)
• Семинары Postgres Professional
9
Mailing lists (листы рассылки)
• pgsql-hackers – основной лист для
общения разработчиков
• pgsql-bugs
• pgsql-general
• pgsql-perfomance
• pgsql-novice
• И так далее...
10
Правила хорошего тона в
листах рассылки
• Отдельное письмо для новой темы
• Используйте теги и пометки
– PROPOSAL, WIP (Work In
Progress), POC (Proof Of
Concept), PATCH
• Отвечайте в рассылку или
“Ответить всем”
• Цитируйте
11
Правила хорошего тона в
листах рассылки
• Используйте подпись, если
работаете в компании
Hi, hackers! 
Bla­bla­bla.
­­ 
Anastasia Lubennikova
Postgres Professional: 
http://www.postgrespro.com
The Russian Postgres Company
12
Правила хорошего тона в
листах рассылки
• Пишите ответ в конце письма
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?
13
Цикл разработки
• Создание ветки для новой версии
• Commitfests (с июля по март)
• Feature Freeze (середина апреля)
• Alpha-версия
• Тестирование и доработка
• Beta-версия (середина июня)
• Выпуск новой версии PostgreSQL
(середина октября)
14
Commitfests
• Разработчики выкладывают патчи
• Получают обратную связь от
Reviewers
• Автор дорабатывает патч
• Reviewer отмечает патч как готовый
для коммита
• Коммитер добавляет патч в
репозиторий на Github
15
Где найти материалы?
• Документация
• Feature Matrix
• Архивы листов рассылок
• Wiki PostgreSQL
• Блоги о PostgreSQL
• Книги
• Видео докладов с конференций
• README и комментарии к коду
16
Содержание
• Как устроено международное
сообщество PostgreSQL
• Как написать патч (от Proposal до
Commit'а)
• Инструменты разработчика
17
Как написать патч
• Идея
• Proposal (предложение)
• Обсуждение
• Разработка
• Ревью
• Принятый патч
18
Идея
• Есть ли готовые решения?
• Это задача из TODO?
• Предыдущие обсуждения в hackers?
• Аналоги в других системах?
• Документация и README
• Исходный код
19
Proposal
• Идея, use case
• Измеримые результаты
• Необходимые изменения
– например, новый синтаксис
• Ссылки на:
– прошлые обсуждения в hackers
– академические статьи
• Вопросы
20
Обсуждение
• Кто-то уже работает над этим
• Подводные камни
• Вопросы реализации
• Предложения
• Это слишком сложно внедрить
• Это никому не нужно =(
Защищайте свою идею!
21
Разработка
• Код
• Отладка
• Тесты
– regression tests
– concurrency tests
– обратная совместимость
• Code style
• Документация
22
Код
23
Отладка
• Gdb
– select pg_backend_pid();
pg_backend_pid 
­­­­­­­­­­­­­­­­
           5140
(1 row)
– gdb ­p 5140
• Logfile
24
Отладочный вывод
• elog
elog(LOG,“Server msg”);
elog(NOTICE,“Client expected msg”);
elog(WARNING,“Client unexpected msg”);
elog(ERROR, “Abort transaction”);
●
print.c, outfuncs.c
●
Assert
Assert(some_ptr != NULL);
25
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
26
Pgbench
• pgbench
27
Buildfarm
• PostgreSQL Buildfarm
• Только после коммита
28
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);
29
Настройки
• postgresql.conf
– SHOW config_file;
– SHOW ALL;
– select * from pg_settings;
• ?
– timing
– x
30
Настройки
• 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;
31
Code style
• Выравнивание Tab'ами
• Tab-size = 4
• Без концевых пробелов
• {} на отдельной строке
• Перенос длинных строк
• Объявления переменных в начале
блока
32
Code style
• Комментарии
/*­­­­­­­­­­­­­­­­­­­­­­­
 * (___/) комментарий
 * (='.'=)   со сложным
 * (")_(") форматированием
 *­­­­­­­­­­­­­­­­­­­­­­­
 */
• src/tools/pgindent
33
Документация
• Комментарии
– объяснить “зачем”, а не “как”
– упомянуть зависимости
• README
– обзор раздела кода
• Документация
– примеры
– предупреждения
34
Патч
• Новое письмо в hackers.
– Ссылка на прошлое обсуждение
– Описание ситуации
– На какой коммит оно ложится
– Тесты и результаты
– Документация
• Патч на коммитфесте
35
Содержание
• Как устроено международное
сообщество PostgreSQL
• Как написать патч (от Proposal до
Commit'а)
• Инструменты разработчика
36
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
37
Git
●
Ежедневная работа с Git
●
Шпаргалка
●
Поиск коммита по изменениям
– git log ­S 'vacuum'
38
IDE / Текстовый редактор
●
Vim. Filestyle
●
Emacs. src/tools/editors
●
Sublime Text. Trailing Spaces
●
KDevelop
●
Eclipse
●
Doxygen*
*только web-интерфейс к коду
39
./configure
●
Installation Procedure
CFLAGS='­O0'   CFLAGS='­O2'или
./configure
­­prefix=$WORKSPACE_PATH/postgres_bin/
­­enable­debug
­­enable­cassert
­­enable­depend
40
Переменные окружения
PATH=”$WORKSPACE_PATH/postgres_bin/bin”
LD_LIBRARY_PATH=
”$WORKSPACE_PATH/postgres_bin/lib”
PGDATA=”$WORKSPACE_PATH/postgres_data”
41
make
●
make ­j4
●
make install
●
make clean
●
make distclean
42
Установка
●
Installation guide
./configure //     не забывайте флаги
make ­j4
make check //       временная установка и тесты
su
#make install
#adduser postgres
#mkdir $WORKSPACE_PATH/postgres_data
#chown postgres 
$WORKSPACE_PATH/postgres_data
43
Установка
initdb ­D $WORKSPACE_PATH/postgres_data
pg_ctl ­D $WORKSPACE_PATH/postgres_data 
­l logfile start
createdb test
psql test
44
Продолжение следует...
●
В следующий раз:
– как организован исходный код
– System Catalogs
– Node, Oid, Datum, Relation и
прочие страшные слова
www.postgrespro.ru
СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?
Анастасия Лубенникова
a.lubennikova@postgrespro.ru

More Related Content

PDF
Hacking PostgreSQL. Обзор исходного кода
PDF
Hacking PostgreSQL. Обзор архитектуры.
PDF
Расширения для PostgreSQL
PDF
pgconf.ru 2015.avito postgresql recovery
PDF
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
PDF
pgconf.ru 2015 avito postgresql
ODP
Hacking PostgreSQL. Физическое представление данных
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор архитектуры.
Расширения для PostgreSQL
pgconf.ru 2015.avito postgresql recovery
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
pgconf.ru 2015 avito postgresql
Hacking PostgreSQL. Физическое представление данных
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...

What's hot (20)

PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Hacking PostgreSQL. Разделяемая память и блокировки.
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PDF
2014.10.15 Сергей Бурладян, Avito.ru
PDF
Avito Stachka 2012
PDF
Олег Бартунов и Иван Панченко
PDF
Семь тысяч Rps, один go
PDF
PostgreSQL в высоконагруженных проектах
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PDF
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Барнаул15
PDF
Linuxvirt seminar-csc-2015
PDF
Highload 2014. PostgreSQL: ups, DevOps.
PPTX
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
PDF
Streaming replication in practice
PDF
Romanova techforum bash
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Hacking PostgreSQL. Разделяемая память и блокировки.
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
2014.10.15 Сергей Бурладян, Avito.ru
Avito Stachka 2012
Олег Бартунов и Иван Панченко
Семь тысяч Rps, один go
PostgreSQL в высоконагруженных проектах
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Барнаул15
Linuxvirt seminar-csc-2015
Highload 2014. PostgreSQL: ups, DevOps.
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Streaming replication in practice
Romanova techforum bash
Ad

Viewers also liked (20)

PDF
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
PDF
5 мифов о производительности баз данных и Python
PDF
Python и высокая нагрузка
PDF
Big Data aggregation techniques
PPT
Gtd Dev Labs2010 Part Ii
PPT
Gtd Dev Labs2010 Part I
PDF
PostgreSQL Vacuum: Nine Circles of Hell
PPT
Kpi indicator
PPT
Kpi key
DOC
2009-2010 10 Syllabus
PPTX
Making Awesome Experiences with Biosensors
PDF
Page compression. PGCON_2016
DOCX
Kumpulan pantun by:ririnrosalinda abdinegara
PPTX
SalesRev - Boost Your Conversions and Generate More Business Without Spending...
PPTX
Toyato cars
PPT
Kpi google analytics
PDF
Destroying Router Security
PPT
Kpi for project management
PDF
Instructivo hidrología unamba
DOC
2011-2012 AmLit Syllabus
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
5 мифов о производительности баз данных и Python
Python и высокая нагрузка
Big Data aggregation techniques
Gtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part I
PostgreSQL Vacuum: Nine Circles of Hell
Kpi indicator
Kpi key
2009-2010 10 Syllabus
Making Awesome Experiences with Biosensors
Page compression. PGCON_2016
Kumpulan pantun by:ririnrosalinda abdinegara
SalesRev - Boost Your Conversions and Generate More Business Without Spending...
Toyato cars
Kpi google analytics
Destroying Router Security
Kpi for project management
Instructivo hidrología unamba
2011-2012 AmLit Syllabus
Ad

Similar to Советы для начинающих разработчиков PostgreSQL (20)

PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PDF
Postgresql v509
PDF
#noBackend, или Как выжить в эпоху толстеющих клиентов
PDF
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
PDF
История небольшого успеха с PostgreSQL – Владимир Бородин
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
PDF
SECON'2016. Бартунов Олег, Карьера в Open Source
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
PDF
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PDF
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
ODP
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
История небольшого успеха с PostgreSQL
PDF
Перевод новостного приложения на БД PostgreSQL
PDF
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
pgconf 2017 Moscow. Make PostgreSQL from source
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
Postgresql v509
#noBackend, или Как выжить в эпоху толстеющих клиентов
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
История небольшого успеха с PostgreSQL – Владимир Бородин
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
SECON'2016. Бартунов Олег, Карьера в Open Source
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Краткий обзор новинок PostgreSQL 9.4 – Николай Самохвалов
PostgreSQL Moscow Meetup - September 2014 - Nikolay Samokhvalov
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
История небольшого успеха с PostgreSQL
Перевод новостного приложения на БД PostgreSQL
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
pgconf 2017 Moscow. Make PostgreSQL from source

Советы для начинающих разработчиков PostgreSQL