Использование таблиц
Переименование полей
PostgreSQL позволяет изменять имена полей без изменения данных, хранящихся таблице. Впрочем, переименование полей – дело рискованное, поскольку существующие приложения могут содержать ссылки на имена полей. Если программа обращается к полю по имени, то переименование может нарушить ее работоспособность.
Команда переименования полей имеет следующий синтаксис:
ALTER TABLE таблица RENAME [ COLUMN ] имя_поля ТО новое_иня_поля
Как и в других командах ALTER TABLE, ключевое слово COLUMN является необязательным. По двум идентификаторам, разделенным ключевым словом ТО, PostgreSQL может определить, что команда переименования относится к одному полю, а не таблице. Пример переименования полей приведен в листинге 4.11.
Листинг 4.11. Переименование поля.
booktown=# \d daily_inventory Table "daily_inventory" Attribute | Type | Modifier isbn | text in_stock | boolean | booktown=# ALTER TABLE daily_inventory booktown-# RENAME COLUMN in_stock TO is_in_stock; ALTER booktown=# ALTER TABLE daily_inventory booktown-l RENAME COLUMN is_in_stock TO is_stocked; ALTER
Добавление ограничений
После создания таблицы сохраняются некоторые возможности добавления ограничении. В PostgreSQL 7.1.x команда ALTER TABLE с секцией ADD CONSTRAINT позволяет определять для полей существующих таблиц только ограничения внешнего ключа и проверки. Команда создания новых ограничений имеет следующий синтаксис:
ALTER TABLE таблице ADD CONSTRAINT имя_ограничения определение
Синтаксис определения зависит от типа ограничения. В листинге 4.12 продемонстрирован синтаксис создания ограничения внешнего ключа для таблицы editions (связанной с полем id таблицы books) и ограничения проверки для поля type.
Листинг 4.12. Создание новых ограничений в существующей таблице.
booktown=# ALTER TABLE editions booktown-# ADD CONSTRAINT foreign_book booktown-# FOREIGN KEY (book_id) REFERENCES books (id); NOTICE: ALTER TABLE… ADD CONSTRAINT will create implicit trigger(s) for FOREIGN KEY check(s) CREATE booktown=# ALTER TABLE editions booktown-# ADD CONSTRAINT hard_or_paper_back booktown-# CHECK (type = 'p' OR type = 'h'): ALTER
Установка ограничения внешнего ключа приводит к тому, что любое значение book_i d в таблице editions также должно существовать в таблице books. Кроме того, вследствие установленного ограничения проверки поле type в таблице editions может содержать только значения р или b.
Примечание
Ограничение уникальности также неявно устанавливается при создании уникального индекса командой CREATE INDEX (см. раздел "Индексы" в главе 7).
Дополнительная информация об ограничениях, их назначении и синтаксисе приведена в главе 7.