Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

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