Сергей Супрунов
В середине января этого года вышла новая версия открытой системы управления
базами данных PostgreSQL 8.0. Основные характеристики этой СУБД были
рассмотрены ранее на страницах журнала (см. статью «PostgreSQL: первые шаги»,
№7, 2004 г.). По сравнению с 7-й веткой (на данный момент это версия 7.4.7) в
8-й версии появился ряд нововведений, краткому обзору которых и посвящена эта
статья.
Помимо традиционных исправлений недоработок,
выявленных в прежних версиях, и общих улучшений, смена «мажорной» версии
ознаменовалась рядом принципиальных новшеств, направленных прежде всего на
расширение возможностей по управлению СУБД.
Итак, добавлено понятие табличного пространства (table
spaces). Раньше хранилище данных размещалось в директории, указанной при
инициализации командой initdb, то есть жестко определялось на стадии
инсталляции СУБД и могло находиться только на одной файловой системе. Проблемы
со свободным местом приходилось решать либо с помощью переноса хранилища в
другой раздел диска и размещения символьной ссылки на него, либо повторной
инициализацией хранилища с последующим восстановлением данных из резервной
копии. Теперь команда «CREATE TABLESPACE» позволяет создать несколько табличных
пространств на разных файловых системах. И в дальнейшем при создании новой базы
данных (CREATE DATABASE), таблицы (CREATE TABLE), индекса (CREATE INDEX) и т.
д. можно указать, в каком табличном пространстве следует разместить объекты.
Это помогает более гибко управлять размещением данных на диске и в ряде случаев
повышает быстродействие, например, за счет выноса индексных файлов в табличное
пространство, расположенное на отдельном жестком диске.
Команда «ALTER TABLE» позволяет теперь изменять
тип данных столбца. Раньше для этого требовалось создать новый столбец,
перенести в него данные и затем старый удалить. До версии 7.3 удалять столбцы
тоже было нельзя, и приходилось либо мириться с тем, что никому не нужный
столбец занимает место, либо менять структуру таблицы самым универсальным
способом – создавая на ее основе новую. Теперь для этого достаточно одной
команды: