
- •Ограничения целостности Первичные ключи
- •Внешние ключи
- •Ссылочная целостность
- •Изменение таблиц
- •Добавление колонки
- •Удаление колонки
- •Добавление ограничения
- •Удаление ограничения
- •Изменение значения по умолчанию для колонки
- •Изменение типа данных колонки
- •Переименование колонки
- •Переименование таблицы
- •Удаление таблиц
Добавление колонки
Чтобы добавить колонку, используйте команду вида:
ALTER TABLE products ADD COLUMN description text;
Также в этот момент, вы можете задать ограничения на колонку, используя синтаксис вида:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
Новая колонка изначально заполняется указанным значением по умолчанию (значением null, если вы не задали другое значение в предложении DEFAULT).
Фактически, все опции, которые используются при выполнении команды CREATE TABLE, могут быть применены и здесь. Однако, держите в уме, что значение по умолчанию должно удовлетворять заданным ограничениям, иначе выполнение ADD закончится ошибкой. В качестве альтернативы, вы можете добавить ограничения позже (см. ниже), после того как вы корректно закончили добавление новой колонки.
Удаление колонки
Чтобы удалить колонку, используйте команду вида:
ALTER TABLE products DROP COLUMN description;
Данные в этой колонке будут потеряны. Ограничения, касающиеся этой колонки также будут удалены. Однако, если на колонку ссылается ограничение внешнего ключа другой таблицы, то PostgreSQL не будет молча удалять это ограничение. Вы можете явно указать удаление зависящего от колонки ограничения, добавив CASCADE:
ALTER TABLE products DROP COLUMN description CASCADE;
Добавление ограничения
Чтобы добавить какое-либо ограничение, используется табличный синтаксис определения этого ограничения. Например:
ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
Чтобы добавить ограничение не-null, которое нельзя записать как ограничение на таблицу, используйте синтаксис:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
Указанное ограничение будет задействовано немедленно, так что данные в таблице перед добавлением ограничения должны ему удовлетворять.
Удаление ограничения
Чтобы удалить ограничение, вам необходимо знать его имя. Если вы сами давали ему имя, то все просто. В противном случае, СУБД назначило автоматически сгенерированное имя, которое нужно найти. В этом может помочь команда \d tablename в psql; другие интерфейсы также могут предоставлять способ инспектирования подробностей таблиц. Затем выполняется команда:
ALTER TABLE products DROP CONSTRAINT some_name;
Как и в случае с удалением колонки, вам понадобится добавить CASCADE, если вы хотите удалить ограничение, от которого зависит что либо другое. Например, если некое ограничение внешнего ключа зависит от ограничения уникальности или первичного ключа для ссылочной колонки(ок).
Те же правила работают для всех видов ограничений, исключая ограничения не-null. Чтобы удалить ограничение не-null, используйте
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
Изменение значения по умолчанию для колонки
Чтобы установить новое значение по умолчанию для колонки, используйте команду вида:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
Заметим, что выполнение данной команды не влияет на уже существующие строки в таблице, команда изменят значение по умолчанию только для будущих команд INSERT.
Чтобы удалить любое значение по умолчанию, используйте
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;