Skip navigation.
Home

Материалы к практическим занятиям по СУБД PostgreSQL

 
Так как заинтересованные товарищи (т.е. магистры 2 года) до сих пор никак не откликнулись на прдложение обсудить темы курса, то курс будет посвящен PostgreSQL.
Первое занятие - вводное. Установка, основные утилиты, конфигурационные файлы и параметры. Прошу всех выбравших данный спецкурс иметь у себя на руках материалы к первой паре.
 

Материалы ко второй паре

Эта пара будет посвящена интерфейсам для работы с СУБД. В материалах описаны libPQ, ODBC, Embedded SQL, JDBC и Hybernate. На практике предлагаю работать с ODBC или Embedded SQL. Пользуясь случаем, еще раз скажу громкое "фи" в сторону ORM - это путь для слабых :)  Куча кода генерируется автоматом, контроля над запросами почти нет, контроля над уровнем сериализуемости нет, куча излишних классов и прочие прелести. Enterprise решения, как всегда, отличаются монстроидальностью и неочевидностью. В общем, мне из всего просмотренного разнообразия нравится JDBC, Embedded SQL (так как при их использовании достигается максимальная выразительность на строчку кода, а SQL генерирует не тупой транслятор, а обычно менее дурной программист) и ODBC (но не в Си, так как код пестрит обработкой ошибок, выделением памяти и т.д., а, например, в php:)) Остальное - от лукавого.

Материалы к третьей паре

На этой паре мы займемся изучением процедурных языков СУБД, а именно PL/pgSQL. В прошлом году особых заданий по PL/SQL не было. Теперь мы это с лихвой исправим. Ну а для начала проверим составленные программы. Надеюсь, что они будут. Иначе смотреть на блокировки будет не очень интересно... Как всегда, всем советую иметь с собой материалы.

Материалы к четвертой паре

На этом занятии мы научимся писать хранимые процедуры на языке C. Когда это бывает необходимо? Обычно в тех  случаях, когда создатели СУБД не совсем точно представляли, как вы будете ее использовать, то есть когда нам надо научить ее делать то, что она никогда не умела (например, получать данные по протоколам HTTP/FTP, взаимодействовать с Web-сервисами или другим способом общаться с внешним миром). Материалы лекции доступны здесь.

Вспомогательные материалы к третьему заданию

Выкладываю вспомогательные материалы к четвертому заданию - вид HTTP запросов, создание сетевых клиентов на Си.

Материалы к пятой паре

Пятая пара будет посвящена созданию и обработке дампов БД. Также поговорим о кодировке символов и создании периодических бэкапов. Советую всем перед парой освежить в памяти основы написания скриптов на SH (ничего сложного, я бы рекомендовал Advanced Bash Scripting Guide, но он достаточно большой и привязан к bash, который является надмножеством sh, что может прививать вредные привычки, или курс на citforum, но я на него внимательно не смотрел). Материалы к паре доступны для скачивания.

Материалы к шестой паре

Ну вот, тихим сапом мы подобрались к шестой паре. Написание скриптов для бэкапа на шелле пошло не очень хорошо. На этот раз расскажу что-нибудь легкое - пользовательские типы данных, определяемые пользователем операторы и агрегаты. Выкладываю материалы. Сам я не люблю теорию вероятности (так как не особо ее помню), но с вас, товарищи, буду требовать написать агрегаты для рассчета мат ожидания и дисперсии. Как вы понимаете, мне важно не определение (которое я сам посмотрел в википедии), а реализация данных агрегатов на pl/pgSQL.

Материалы к седьмой паре

Кажется, мы заканчиваем с программированием. В этот раз я расскажу про правила (rules). Их использование аналогично использованию триггеров, но работают они совсем по другому принципу. Именно по этому о них интересно рассказать. Материалы к паре доступны здесь. Материалы с заданием опубликую позже (как только придумаю что-нибудь стоящее :)).

Материалы к восьмой паре

Решил, что пора переходить на PostgreSQL 9.0. Он вышел уже довольно давно, плюс к тому, в нем немного изменились настройки для работы с wal-файлами (что будет рассматриваться через занятие), так что эта пара будет посвящена процедуре обновления СУБД. Если процедуру бэкапа администратор настраивает один раз, а затем спит спокойно, то процедура обновления СУБД, тем более на новую мажорную версию, всегда приносит массу острых ощущений. Выкладываю материалы к паре.

Материалы к девятой паре

Мы приближаемся к самому интересному - репликация, связь со сторонними источниками данных и т.д. А пока - что-то основное и фундаментальное, а именно управление WAL-журналами и point-in-time recovery. Материалы выкладываю. Задание уже опубликовано. Перевод СУБД в режим архивирования журналов, обеспечение создания периодических базовых бэкапов. Затем можете удалить кластер БД и проверить, что у вас все получилось (если смогли восстановить БД, то все сделали правильно, если нет - ,наверное, где-то ошиблись :)).

Материалы к десятой паре

 Ну вот, в среду будем рассматривать одно из основных новшеств PostgreSQL 9.0: Streaming replication. Поговорим о способах репликации и HA вообще, а также рассмотрим способы организации Warm и Hot Standby в PostgreSQL как посредством доставки журналов транзакций, так и посредством Streaming replication. Материалы прилагаются.

Материалы к одиннадцатой паре

Я ранее обещал рассказать про pgpool-II. Однако, был задан вопрос про репликацию данных между PostgreSQL и MySQL, и он меня заинтересовал. Нет, правда, так как я занимаюсь интеграцией данных, было бы неудобно, если б я не сумел ответить. Профессиональная гордость и все такое. Так что я подумал: "не я первый с этим сталкиваюсь, наверняка, решение существует". Конечно, есть решения вроде Oracle Golden Gate, но как оказалось, с PostgreSQL он не работает. Очень не хотелось изобретать велосипед, и я все-таки нашел (полу)рабочее решение - DBI-Link. Я посидел над ним ночью - и напоролся на множество неприятных особенностей. Сегодня я с ними разобрался до конца (спасибо  добрым людям за подсказку, сам бы разбирался намного дольше, так как перл знаю очень паршиво и поэтому не люблю :)). В результате я подготовил лекцию, посвященную интеграции данных. В этот раз поговорим про DBLink (contrib-модуль PostgreSQL, позволяющий работать со сторонними СУБД PostgreSQL) и DBI-Link (проект, позволяющий работать со сторонними СУБД в гетерогенном окружении). Материалы получились большими, но код исправленного триггера вам разбирать не надо, и он представлен там просто для целостности картины. И предупреждение - если вы заходите использовать DBI-Link в production, я бы порекомендовал вначале полностью просмотреть код, чтобы вы понимали, как он работает и тщательно протестировать работу репликации в различных ситуациях (например, что случится при обновлении Primary Key, при недоступности slave-сервера, при изменении таблицы на slave-сервере и т.д.?)

pgpool-II

Как я и обещал, расскажу про pgpool-II - достаточное мощное middleware для выполнения задач HA, распределения нагрузки и data sharding'а. Материалы прилагаются.

Мониторинг работы сервера PostgreSQL

Нельзя объять необъятное. Но я попытаюсь немного рассказать о способах мониторинга работы сервера PostgreSQL. В программе - мониторинг размеров БД и таблиц,  анализ логов, мониторинг блокировок, рассказ о VACUUM и о том, как оценивать его работу, ну и напоследок - самое вкусное - использование DTrace для сбора статистики о работающем сервере.