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

www.postgrespro.ru

СОВЕТЫ ДЛЯ РАЗРАБОТЧИКОВ POSTGRESQL

Анастасия Лубенникова

[email protected]

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

2

Содержание

• Как устроено международное сообщество PostgreSQL

• Как написать патч (от Proposal до Commit'а)

• Инструменты разработчика

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

3

Мотивация

• Изучение PostgreSQL• Создание материала для обучения

новых разработчиков• Шпаргалка и чек-лист для себя• Обмен опытом

*Подчеркнутый текст – это ссылки

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

4

Содержание

• Как устроено международное сообщество PostgreSQL

• Как написать патч (от Proposal до Commit'а)

• Инструменты разработчика

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

5

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

6

Сообщество PostgreSQL

• The PostgreSQL Global Development Group (PGDG)– Основная команда – core team– Коммитеры – commiters– (Основные) разработчики –

(Major) contributors

• Компании-спонсоры (Postgres Professional, EnterpriseDB, 2ndQuadrant, Cybertec...)

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

7

Open source

• Распространяется свободно• Лицензия PostgreSQL License –

похожа на BSD• Исходный код PostgreSQL доступен

на Github• Документация в открытом доступе

на официальном сайте– Содержит разделы и для DBA, и

для разработчиков

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

8

Конференции и встречи

• PGCon в Оттаве (в середине июня)• PGConf.eu (в конце октября)• PGConf.ru (в начале февраля)• Множество локальных

PGConf и PGDay (в течение года)• #PostgreSQLRussia Meetup (каждый

месяц)• Семинары Postgres Professional

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

9

Mailing lists (листы рассылки)

• pgsql-hackers – основной лист для общения разработчиков

• pgsql-bugs• pgsql-general• pgsql-perfomance• pgsql-novice• И так далее...

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

10

Правила хорошего тона в листах рассылки

• Отдельное письмо для новой темы• Используйте теги и пометки

– PROPOSAL, WIP (Work In Progress), POC (Proof Of Concept), PATCH

• Отвечайте в рассылку или “Ответить всем”

• Цитируйте

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

11

Правила хорошего тона в листах рассылки

• Используйте подпись, если работаете в компании

Hi, hackers! 

Bla­bla­bla.

­­ 

Anastasia Lubennikova

Postgres Professional: http://www.postgrespro.com

The Russian Postgres Company

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

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?

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

13

Цикл разработки

• Создание ветки для новой версии• Commitfests (с июля по март)• Feature Freeze (середина апреля)• Alpha-версия• Тестирование и доработка• Beta-версия (середина июня)• Выпуск новой версии PostgreSQL

(середина октября)

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

14

Commitfests

• Разработчики выкладывают патчи• Получают обратную связь от

Reviewers• Автор дорабатывает патч• Reviewer отмечает патч как готовый

для коммита• Коммитер добавляет патч в

репозиторий на Github

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

15

Где найти материалы?

• Документация• Feature Matrix• Архивы листов рассылок• Wiki PostgreSQL• Блоги о PostgreSQL• Книги• Видео докладов с конференций• README и комментарии к коду

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

16

Содержание

• Как устроено международное сообщество PostgreSQL

• Как написать патч (от Proposal до Commit'а)

• Инструменты разработчика

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

17

Как написать патч

• Идея• Proposal (предложение)• Обсуждение• Разработка• Ревью• Принятый патч

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

18

Идея

• Есть ли готовые решения?• Это задача из TODO?• Предыдущие обсуждения в hackers?• Аналоги в других системах?• Документация и README• Исходный код

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

19

Proposal

• Идея, use case• Измеримые результаты• Необходимые изменения

– например, новый синтаксис

• Ссылки на:– прошлые обсуждения в hackers– академические статьи

• Вопросы

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

20

Обсуждение

• Кто-то уже работает над этим• Подводные камни• Вопросы реализации• Предложения• Это слишком сложно внедрить• Это никому не нужно =(

Защищайте свою идею!

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

21

Разработка

• Код• Отладка• Тесты

– regression tests– concurrency tests– обратная совместимость

• Code style• Документация

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

22

Код

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

23

Отладка

• Gdb– select pg_backend_pid();

pg_backend_pid 

­­­­­­­­­­­­­­­­

           5140

(1 row)

– gdb ­p 5140

• Logfile

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

24

Отладочный вывод

• elogelog(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);

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

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

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

27

Buildfarm

• PostgreSQL Buildfarm• Только после коммита

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

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);

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

29

Настройки

• postgresql.conf– SHOW config_file;

– SHOW ALL;

– select * from pg_settings;

• \?– \timing

– \x

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

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;

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

31

Code style

• Выравнивание Tab'ами• Tab-size = 4• Без концевых пробелов• {} на отдельной строке• Перенос длинных строк• Объявления переменных в начале

блока

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

32

Code style

• Комментарии

/*­­­­­­­­­­­­­­­­­­­­­­­

 * (\___/) комментарий

 * (='.'=)   со сложным

 * (")_(") форматированием

 *­­­­­­­­­­­­­­­­­­­­­­­

 */

• src/tools/pgindent

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

33

Документация

• Комментарии– объяснить “зачем”, а не “как”– упомянуть зависимости

• README– обзор раздела кода

• Документация– примеры– предупреждения

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

34

Патч

• Новое письмо в hackers.– Ссылка на прошлое обсуждение– Описание ситуации– На какой коммит оно ложится– Тесты и результаты– Документация

• Патч на коммитфесте

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

35

Содержание

• Как устроено международное сообщество PostgreSQL

• Как написать патч (от Proposal до Commit'а)

• Инструменты разработчика

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

36

Git

● Working with Gitgit 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

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

37

Git

● Ежедневная работа с Git● Шпаргалка● Поиск коммита по изменениям

– git log ­S 'vacuum'

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

38

IDE / Текстовый редактор

● Vim. Filestyle● Emacs. src/tools/editors● Sublime Text. Trailing Spaces● KDevelop● Eclipse● Doxygen*

*только web-интерфейс к коду

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

39

./configure

● Installation Procedure

CFLAGS='­O0'   CFLAGS='­O2'или

./configure

­­prefix=$WORKSPACE_PATH/postgres_bin/

­­enable­debug

­­enable­cassert

­­enable­depend

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

40

Переменные окружения

PATH=”$WORKSPACE_PATH/postgres_bin/bin”

LD_LIBRARY_PATH=

”$WORKSPACE_PATH/postgres_bin/lib”

PGDATA=”$WORKSPACE_PATH/postgres_data”

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

41

make

● make ­j4● make install● make clean● make distclean

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

42

Установка

● Installation guide./configure //     не забывайте флаги

make ­j4

make check //       временная установка и тесты

su

#make install

#adduser postgres

#mkdir $WORKSPACE_PATH/postgres_data

#chown postgres $WORKSPACE_PATH/postgres_data

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

43

Установка

initdb ­D $WORKSPACE_PATH/postgres_data

pg_ctl ­D $WORKSPACE_PATH/postgres_data 

­l logfile start

createdb test

psql test

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

44

Продолжение следует...

● В следующий раз:

– как организован исходный код– System Catalogs– Node, Oid, Datum, Relation и

прочие страшные слова

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

www.postgrespro.ru

СПАСИБО ЗА ВНИМАНИЕ! ВОПРОСЫ?

Анастасия Лубенникова

[email protected]