PostgreSQL: слон-помощник

Пожалуй, если говорить о недооценённых конечными пользователями и недостаточно широко известных программных продуктах, то я назвал бы PostgreSQL в числе первых из них. Поскольку эта СУБД, будучи на голову выше многих своих конкурентов, пользуется меньшей популярностью и известностью, чем некоторые из них...


Вступление

Конечно, каждая СУБД имеет плюсы и минусы, а потому говорить о том, что какая-то из них лучшая, а остальные не имеют вовсе права на существование - это как-то по-детски. Согласитесь, ведь большинство популярных в наши дни систем управления базами данных существуют уже довольно длительное время в условиях жёсткой конкуренции. Если бы действительно существовала какая-то одна СУБД, с лёгкостью затыкающая за пояс все остальные, то эти остальные попросту исчезли бы с рынка. Поэтому СУБД сегодня - это нишевый продукт, и говорить о плюсах или минусах можно только через призму того проекта, в котором планируется использовать ту или иную СУБД. Если же говорить в общем, то речь может идти исключительно о характерных чертах системы управления базами данных, без придания им негативной или позитивной окраски.

PostgreSQL - это СУБД, которая ориентирована на тех, кому недостаточно возможностей MySQL, но кто при этом не торопится покупать Oracle. Дело в том, что эта СУБД, оставаясь свободной, предлагает пользователю очень неплохую функциональность. Кроме того, её очень серьёзный плюс состоит в лицензии, на условиях которой она распространяется. В то время как многие свободные продукты для разработчиков выбрали лицензию GNU GPL, фактически, закрывающую доступ к ним создателям коммерческого программного обеспечения, разработчики PostgreSQL предпочли распространять своё детище под менее строгой к коммерческому использованию программ лицензией BSD. Причина этого, в общем-то, проста - дело в том, что изначально эта СУБД разрабатывалась в Калифорнийском университете в Беркли, о принадлежности авторских прав которому и говорит лицензия BSD. Называлась тогда эта СУБД несколько короче - просто Postgres, что расшифровывалось как Post Ingres (Ingres - это весьма популярная на то время система управления базами данных, которая не устраивала университет тем, что была наполовину коммерческой). В целом, лицензия - это действительно один из самых сильных моментов PostgreSQL, который позволяет удешевлять коммерческие продукты благодаря использованию её вместо дорогостоящих коммерческих СУБД.

Впрочем, я уже, кажется, перешёл от вступления к рассказу о преимуществах и недостатках PostgreSQL. Что ж, в конце концов, именно им и посвящена данная статья, но сначала нужно сказать пару слов о том, где можно познакомиться с PostgreSQL лично.

 


Знакомство с PostgreSQL

Поскольку ни один серьёзный программный продукт не обходится без своего виртуального представительства во Всемирной паутине, имеется он и у этой СУБД и располагается по адресу www.postgresql.org. В отличие от сайтов множества других свободных продуктов, сайт PostgreSQL явно рассчитан не только на сообщество тех, кто давно использует этот программный продукт, но и на тех, кто решил попробовать его на практике впервые. Хотя на официальном сайте программы более чем достаточно всякой документации, конечно, отечественному разработчику будет всё-таки приятнее почитать материалы на русском языке. Их в Сети более чем достаточно, однако я хотел бы порекомендовать, в первую очередь, ресурс postgresql.ru.net.

Хотелось бы обратить ваше внимание на то, что PostgreSQL - это кросс-платформенное решение. Хотя кросс-платформенными СУБД никого уже лет двадцать не удивишь, это, тем не менее, достаточно важно. Тем не менее, по отзывам многих пользователей, не все платформы для PostgreSQL равны - есть, как говорится, равнее. Само собой, изначально PostgreSQL создавалась для POSIX-платформ, а затем уже переносилась на Windows. Именно поэтому под Linux, FreeBSD и Solaris эта СУБД чувствует себя лучше, чем под Windows.


Особенности PostgreSQL

Что ж, давайте теперь про особенности. Главная особенность любой СУБД - это, конечно, используемый в ней диалект языка SQL. В PostgreSQL реализован собственный диалект, довольно мощный, но при этом следующий стандартам ANSI SQL-92 и SQL-99. Он называется PL/pgSQL - это процедурный SQL, который, по словам создателей PostgreSQL, весьма схож с PL/SQL, применяемым в Oracle. Возможности PL/pgSQL используются, в основном, для написания функций, выполняемых на стороне сервера, однако для их написания могут применяться и другие языки - PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl, PL/R и PL/Scheme. Помимо скриптовых языков, можно создавать функции с помощью C/C++ и Java, если, конечно, вам так удобнее.

Впрочем, конечно, большое количество разных языков, на которых можно писать выполняемые на сервере функции, - не самое большое преимущество любой СУБД. Разработчики позиционируют PostgreSQL как очень надёжное средство работы с данными. В качестве подтверждения высокой надёжности данной СУБД её создатели приводят результаты исследований, проведённых EnterpriseDB Corporation (эта компания выпускает продукты, расширяющие функциональность PostgreSQL, а также занимается платной поддержкой пользователей самой СУБД). Эта компания проанализировала код различных свободных программных продуктов с помощью инструмента Coverity Prevent, показывающего статистику уязвимостей исходя из программного кода. Согласно результатом данного тестирования свободного ПО, PostgreSQL действительно оказался едва ли не самым свободным от ошибок продуктом. Согласно данным EnterpriseDB, на 775 тысяч строк программного кода было обнаружено всего 20 дефектов (вспомните количество дефектов, которые вы обнаруживали сами в собственном коде, и вы проникнетесь всей значимостью этой скромной цифры). Это означает одну ошибку на 39 тысяч строк кода. Для MySQL эта цифра на тот момент составляла около одной ошибки на 7 тысяч строк кода - согласитесь, это сравнение заставляет задуматься над некоторыми насущными вопросами.

Впрочем, надо сказать, что количество ошибок, тем более выявленных таким достаточно спорным путём, вовсе не является мерилом надёжности PostgreSQL в полном смысле этого слова. Здесь, несомненно, следует упомянуть и о том, что в своей работе СУБД полностью следует принципам ACID. Что это означает? ACID расшифровывается как Atomicity, Consistency, Isolation, Durability. По-русски - атомарность, непротиворечивость, изолированность, сохранность. Относятся все эти красивые и звучные слова, конечно же, к данным, с которыми работает эта СУБД. В общем и целом, следование принципам ACID позволяет добиться высокой степени защищённости данных от сбоев при использовании механизма транзакций.

Что касается конкурентного доступа к СУБД, то в PostgreSQL реализован механизм многоверсионности. Что это значит? Всё достаточно просто. Каждая транзакция в конкурентной среде видит только одну версию базы данных - ту, которая была актуальной на момент начала этой транзакции. Данный способ изоляции транзакций и защиты базы данных от несогласованных изменений позволяет не мешать транзакциям работать с данными независимо друг от друга - кроме, разве что, тех случаев, когда они пытаются обратиться к одной и той же записи в базе. Увеличивает надёжность СУБД и механизм протоколирования транзакций - Write Ahead Logging (WAL). PostgreSQL записывает все изменения данных на жёсткий диск (или другой носитель, на котором вы пожелаете расположить базу данных) только после того, как удостоверится, что записи в журнале, говорящие о проведении транзакции, уже успешно записаны. Такой механизм ведения журнала позволяет даже в случае каких-то сбоев восстанавливать базу данных благодаря журналу транзакций.

Несколько слов нужно сказать и о типах данных - в конце конов, ради данных ведь всё, в общем-то, и затевалось, и именно они наиболее важны для конечного пользователя СУБД PostgreSQL. Типов данных PostgreSQL поддерживает великое множество, начиная с простых символьных с ограниченной или неограниченной длиной и заканчивая специфическими геометрическими типами (они описывают разные геометрические объекты - линии, точки, прямоугольники...), GIS-типами, сетевыми типами для протоколов IPv4 и IPv6... Для работы с этими типами предлагается достаточно большое количество различных встроенных функций, которые помогут разработчику в нелёгком деле создания приложений, работающих с базами данных.

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


Интеграция и инструменты

Какой бы хорошей ни была та или иная СУБД, грош ей цена, если нет инструментов, позволяющих разработчику не испытывать дискомфорта, создавая приложения, которые будут с ней "общаться". У PostgreSQL с этим, к счастью, всё в порядке.

Для того, чтобы интегрировать поддержку PostgreSQL в свои приложения, можно воспользоваться API, которые предоставляют разработчики СУБД. Это, на самом деле, не слишком удобно, поэтому лучше воспользоваться ODBC-драйвером для этой СУБД (www.postgresql.org/ftp/odbc). Для тех, кто пишет на Java, нужен, конечно, JDBC-драйвер (jdbc.postgresql.org). Если вы используете в своей работе Delphi или C++ Builder (а эти среды до сих пор очень популярны среди создателей приложений, работающих с базами данных), то вас наверняка заинтересует такая вещь, как PostgresDAC (www.microolap.com/products/connectivity/postgresdac). Разработчикам .NET-приложений сюда: npgsql.projects.postgresql.org.

Что касается инструментов для создания баз данных, то их также вполне достаточно. Начиная от поддержки PostgreSQL разными универсальными редакторами БД и заканчивая бесплатной утилитой pgAdmin. Есть и платные решения, которых также более чем достаточно - как говорится, Google в помощь!


Резюме

Что же, давайте подведём итоги всему тому, что было выше сказано об этой, без сомнения, замечательной системе управления базами данных. Логотип со слоном полностью отражает её сущность - это очень мощная и надёжная СУБД, обладающая, ко всему прочему, очень привлекательными условиями использования в коммерческих программных продуктах. Сложно сказать, почему PostgreSQL менее распространена, чем многие другие СУБД, предлагающие своим пользователям куда меньше возможностей на значительно менее интересных условиях. Наверное, просто её создатели недостаточно внимания уделяли рекламе.

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

11 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя qwerty
граматныя людзі ведалі пра яе даўным-даўно, а ў каго брэнды выелі мозг і цяпер ня зьвернуць на яе ўвагу. а ўвогуле, да вэрсіі 8.0 яна ня ўмела працаваць у рэжыме 7x24 - патрэбны быў vacuum. і клястэра "з каробкі" і сёньня няма
Аватар пользователя Al
Очередная нулевая статья известного в узких кругах автора. Выбирая для своих нужд СУБД, я бы на основании этой статьи не смог решить, подходит она мне или нет. Какие ограничения на число записей, какая скорость обработки запросов... А уж после прочтения того, что PL/SQL - это особый диалект SQL, все стало ясно - парень не рубит фишку. Кто знает, то понимает. :) Так что эта статья не просто нулевая, но еще и вводит народ в заблуждение. Эх, Вадим... :)
Аватар пользователя Вадим Станкевич
А что такое, по-Вашему, PL/SQL, как не процедурный SQL? Как это назвать тогда правильно?
Аватар пользователя Al
Видите ли, Вадим, если бы я не писал на обоих языках для Oracle, я бы не писал того, что написал. Вы, похоже, только читали про них. PL/SQL - это такой же язык, как, например, C или Pascal, по внешнему виду. А SQL - это это язык, состоящий исключительно из операторов SQL типа SELECT, DROP, OPEN и т.п.