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

What's hot (20)

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

Viewers also liked (20)

PDF
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 
PDF
5 мифов о производительности баз данных и Python
Max Klymyshyn
 
PDF
Python и высокая нагрузка
Alexander Shigin
 
PDF
Big Data aggregation techniques
Valentin Logvinskiy
 
PPT
Gtd Dev Labs2010 Part Ii
Maxim Dorofeev
 
PPT
Gtd Dev Labs2010 Part I
Maxim Dorofeev
 
PDF
PostgreSQL Vacuum: Nine Circles of Hell
Alexey Lesovsky
 
PPT
Kpi indicator
chamberthomas
 
PPT
Kpi key
chamberthomas
 
DOC
2009-2010 10 Syllabus
slr1541
 
PPTX
Making Awesome Experiences with Biosensors
SophiKravitz
 
PDF
Page compression. PGCON_2016
Anastasia Lubennikova
 
DOCX
Kumpulan pantun by:ririnrosalinda abdinegara
ririnrosalinda
 
PPTX
SalesRev - Boost Your Conversions and Generate More Business Without Spending...
Keith McGibbon
 
PPTX
Toyato cars
kaustubr08
 
PPT
Kpi google analytics
chamberthomas
 
PDF
Destroying Router Security
Iván Sanz de Castro
 
PPT
Kpi for project management
chamberthomas
 
PDF
Instructivo hidrología unamba
Jesus Ayerve Tuiro
 
DOC
2011-2012 AmLit Syllabus
slr1541
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Ontico
 
5 мифов о производительности баз данных и Python
Max Klymyshyn
 
Python и высокая нагрузка
Alexander Shigin
 
Big Data aggregation techniques
Valentin Logvinskiy
 
Gtd Dev Labs2010 Part Ii
Maxim Dorofeev
 
Gtd Dev Labs2010 Part I
Maxim Dorofeev
 
PostgreSQL Vacuum: Nine Circles of Hell
Alexey Lesovsky
 
Kpi indicator
chamberthomas
 
Kpi key
chamberthomas
 
2009-2010 10 Syllabus
slr1541
 
Making Awesome Experiences with Biosensors
SophiKravitz
 
Page compression. PGCON_2016
Anastasia Lubennikova
 
Kumpulan pantun by:ririnrosalinda abdinegara
ririnrosalinda
 
SalesRev - Boost Your Conversions and Generate More Business Without Spending...
Keith McGibbon
 
Toyato cars
kaustubr08
 
Kpi google analytics
chamberthomas
 
Destroying Router Security
Iván Sanz de Castro
 
Kpi for project management
chamberthomas
 
Instructivo hidrología unamba
Jesus Ayerve Tuiro
 
2011-2012 AmLit Syllabus
slr1541
 
Ad

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

PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Rais Charipov
 
PDF
Практика разработки веб-серверов на Rust
Michael Pankov
 
PDF
Workflow: работа над проектом в Яндексе
Denis Chistyakov
 
PDF
Фронтенд для миллионов (Орёл)
Anastasia Goryacheva
 
PDF
Python Development process in Yandex
aviatakz
 
PDF
Процессы разработки в Яндексе
Andrey Kazarinov
 
PDF
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
 
PPTX
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Ontico
 
PPTX
обзор архитектуры и подсистем деплоя и мониторинга
Константин Никифоров
 
PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
Yehor Herasymchuk
 
PDF
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Yandex
 
PDF
Масштабируемая архитектура фронтенда
Roman Dvornov
 
PDF
Михаил Корепанов "Инкрементальные обновления на клиенте"
Yandex
 
PDF
Иван Карев — Клиентская оптимизация
Yandex
 
PDF
Team workflow
Даниил Зайцев
 
PDF
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
 
PDF
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Yandex
 
PDF
Puppet development kit and best practices
Igor Kurochkin
 
PDF
20111002 information retrieval raskovalov_lecture3
Computer Science Club
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
Rais Charipov
 
Практика разработки веб-серверов на Rust
Michael Pankov
 
Workflow: работа над проектом в Яндексе
Denis Chistyakov
 
Фронтенд для миллионов (Орёл)
Anastasia Goryacheva
 
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Andrey Kazarinov
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Ontico
 
обзор архитектуры и подсистем деплоя и мониторинга
Константин Никифоров
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Zero Downtime PHP Deployment with Envoyer And Forge
Yehor Herasymchuk
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Yandex
 
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Yandex
 
Иван Карев — Клиентская оптимизация
Yandex
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Yandex
 
Puppet development kit and best practices
Igor Kurochkin
 
20111002 information retrieval raskovalov_lecture3
Computer Science Club
 
Ad

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