ALTER FOREIGN TABLE
ALTER FOREIGN TABLE — изменить определение сторонней таблицы
Синтаксис
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] имя [ * ]
действие [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] имя [ * ]
RENAME [ COLUMN ] имя_столбца TO новое_имя_столбца
ALTER FOREIGN TABLE [ IF EXISTS ] имя
RENAME TO новое_имя
ALTER FOREIGN TABLE [ IF EXISTS ] имя
SET SCHEMA новая_схема
где действием может быть:
ADD [ COLUMN ] имя_столбца тип_данных [ COLLATE правило_сортировки ] [ ограничение_столбца [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] имя_столбца [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] имя_столбца [ SET DATA ] TYPE тип_данных [ COLLATE правило_сортировки ]
ALTER [ COLUMN ] имя_столбца SET DEFAULT выражение
ALTER [ COLUMN ] имя_столбца DROP DEFAULT
ALTER [ COLUMN ] имя_столбца { SET | DROP } NOT NULL
ALTER [ COLUMN ] имя_столбца SET STATISTICS целое_число
ALTER [ COLUMN ] имя_столбца SET ( атрибут = значение [, ... ] )
ALTER [ COLUMN ] имя_столбца RESET ( атрибут [, ... ] )
ALTER [ COLUMN ] имя_столбца SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
ALTER [ COLUMN ] имя_столбца OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])
ADD ограничение_таблицы [ NOT VALID ]
VALIDATE CONSTRAINT имя_ограничения
DROP CONSTRAINT [ IF EXISTS ] имя_ограничения [ RESTRICT | CASCADE ]
DISABLE TRIGGER [ имя_триггера | ALL | USER ]
ENABLE TRIGGER [ имя_триггера | ALL | USER ]
ENABLE REPLICA TRIGGER имя_триггера
ENABLE ALWAYS TRIGGER имя_триггера
SET WITHOUT OIDS
INHERIT таблица_родитель
NO INHERIT таблица_родитель
OWNER TO { новый_владелец | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ])
Описание
Команда ALTER FOREIGN TABLE
изменяет определение существующей сторонней таблицы.
Существует несколько форм этой команды:
ADD COLUMN
Эта форма добавляет новый столбец в стороннюю таблицу, используя тот же
синтаксис, что и CREATE FOREIGN TABLE
. В отличие от случая, когда столбец
добавляется в обычную таблицу, при данной операции в базовом хранилище ничего не
происходит: это действие просто объявляет, что некоторый новый столбец теперь
доступен через стороннюю таблицу.
DROP COLUMN [ IF EXISTS ]
Эта форма удаляет столбец из сторонней таблицы. Если от этого столбца зависит что-то вне таблицы (например представление), нужно написать указание CASCADE. Если указано IF EXISTS и столбца не существует, это не считается ошибкой. В этом случае выдается только замечание.
SET DATA TYPE
Эта форма изменяет тип столбца сторонней таблицы. Опять же, это не оказывает никакого влияния на базовое хранилище: это действие просто изменяет тип, который, по мнению QHB, имеет этот столбец.
SET/DROP DEFAULT
Эти формы устанавливают или удаляют значение по умолчанию для столбца. Значения
по умолчанию применяются только в последующих командах INSERT
или UPDATE
; они
не вызывают изменения уже существующих строк в таблице.
SET/DROP NOT NULL
Устанавливает, будет ли столбец принимать значения NULL или нет.
SET STATISTICS
Эта форма задает цель сбора статистики для каждого столбца для последующих операций
ANALYZE
. Дополнительную информацию см. в описании аналогичной формы команды
ALTER TABLE
.
SET ( атрибут = значение [, ... ] )
RESET ( атрибут [, ... ] )
Эта форма устанавливает или сбрасывает значения для атрибута. Дополнительную
информацию см. в описании аналогичной формы команды ALTER TABLE
.
SET STORAGE
Эта форма задает режим хранения для столбца. Дополнительную информацию см. в
описании аналогичной формы команды ALTER TABLE
. Обратите внимание, что режим
хранения не имеет никакого влияния, если обертка сторонних данных таблицы будет
его игнорировать.
ADD ограничение_таблицы [ NOT VALID ]
Эта форма добавляет новое ограничение в стороннюю таблицу, используя тот же
синтаксис, что и CREATE FOREIGN TABLE
. В настоящее время поддерживаются только
ограничения CHECK.
В отличие от случая, когда ограничение добавляется в обычную таблицу, ограничение
сторонней таблицы никак не проверяется; скорее, это действие просто объявляет, что
некоторое новое условие должно выполняться для всех строк в сторонней таблице.
(См. описание на справочной странице команды CREATE FOREIGN TABLE
) Если ограничение
помечено как NOT VALID, то предполагается, что оно не поддерживается, а
записывается для возможного использования в будущем.
VALIDATE CONSTRAINT
Эта форма помечает ограничение, которое ранее было помечено NOT VALID, как проверенное. Никаких действий для проверки ограничения не предпринимается, но будущие запросы будут предполагать, что оно поддерживается.
DROP CONSTRAINT [ IF EXISTS ]
Эта форма удаляет указанное ограничение для сторонней таблицы. Если указано IF EXISTS и ограничение не существует, это не считается ошибкой. В этом случае выдается только замечание.
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER
Эти формы настраивают срабатывание триггера (или триггеров), принадлежащего сторонней
таблице. Дополнительную информацию см. в описании аналогичной формы команды ALTER TABLE
.
SET WITHOUT OIDS
Синтаксис обратной совместимости для удаления системного столбца oid. Так как добавить системные столбцы oid теперь невозможно, это указание не действует.
INHERIT таблица_родитель
Эта форма добавляет целевую стороннюю таблицу в качестве нового дочернего
элемента указанной родительской таблицы. Дополнительную информацию см. в
описании аналогичной формы команды ALTER TABLE
.
NO INHERIT таблица_родитель
Эта форма удаляет целевую стороннюю таблицу из списка дочерних элементов указанной родительской таблицы.
OWNER
Эта форма меняет владельца сторонней таблицы на указанного пользователя.
OPTIONS ( [ ADD | SET | DROP ] параметр ['значение'] [, ... ] )
Изменяет параметры для сторонней таблицы или одного из ее столбцов. ADD, SET и DROP указывают на действие, которое необходимо выполнить. Если явно не указана никакая операция, по умолчанию подразумевается ADD. Повторяющиеся имена параметров не допускаются (хотя иметь одно и то же имя для параметра таблицы и параметра столбца нормально). Имена и значения параметров также проверяются с помощью библиотеки обертки сторонних данных.
RENAME
Формы RENAME
изменяют имя сторонней таблицы или имя ее столбца.
SET SCHEMA
Эта форма перемещает стороннюю таблицу в другую схему.
Все действия, кроме RENAME
и SET SCHEMA
, могут быть объединены в один список
и выполнены одновременно. Например, в одной команде можно добавить несколько
столбцов и/или изменить тип нескольких столбцов.
Если команда написана в виде ALTER FOREIGN TABLE IF EXISTS ...
и сторонняя таблица
не существует, это не считается ошибкой. В этом случае выдается только замечание.
Чтобы использовать команду ALTER FOREIGN TABLE
, нужно быть владельцем
соответствующей сторонней таблицы. Чтобы изменить схему сторонней таблицы,
необходимо помимо этого иметь право CREATE в новой схеме. Для смены владельца
текущий пользователь также должен быть непосредственным или опосредованным членом
новой роли-владельца, и эта роль должна иметь право CREATE в схеме сторонней
таблицы. (Эти ограничения направлены на то, чтобы при смене владельца не происходило
ничего, что нельзя было бы сделать путем удаления и повторного создания сторонней
таблицы. Однако суперпользователь все равно может сменить владельца любой
сторонней таблицы.) Чтобы добавить столбец или изменить тип столбца, помимо этого
необходимо иметь право USAGE для его типа данных.
Параметры
имя
Имя изменяемой существующей сторонней таблицы (может быть дополнено схемой). Если перед именем таблицы указывается ONLY, изменяется только эта таблица. Если ONLY не указано, будут изменены таблица и все ее потомки (если таковые имеются). После имени таблицы можно также добавить необязательное указание *, чтобы явно обозначить, что изменению подлежат все дочерние таблицы.
имя_столбца
Имя нового или существующего столбца.
новое_имя_столбца
Новое имя существующего столбца.
новое_имя
Новое имя таблицы.
тип_данных
Тип данных нового столбца или новый тип данных для существующего столбца.
ограничение_таблицы
Новое ограничение уровня таблицы для сторонней таблицы.
имя_ограничения
Имя существующего ограничения, подлежащего удалению.
CASCADE
Автоматически удалять объекты, зависящие от удаляемого столбца или ограничения (например ссылающиеся на столбец представления), и, в свою очередь, все объекты, зависящие от этих объектов (см. раздел Отслеживание зависимостей).
RESTRICT
Запретить удаление столбца или ограничения, если есть какие-либо зависимые от них объекты. Это поведение по умолчанию.
имя_триггера
Имя одного триггера, который нужно выключить или включить.
ALL
Выключает или включает все триггеры, принадлежащие сторонней таблице. (Если какие-либо из триггеров являются внутрисистемными, то потребуются права суперпользователя. Сама система не добавляет такие триггеры в сторонние таблицы, но дополнительный код может это сделать.)
USER
Выключает или включает все триггеры, принадлежащие сторонней таблице, кроме внутрисистемных
таблица_родитель
Родительская таблица, с которой будет установлена или разорвана связь у этой сторонней таблицы.
новый_владелец
Имя пользователя, который станет новым владельцем таблицы.
новая_схема
Имя схемы, в которую будет перемещена таблица.
Примечания
Ключевое слово COLUMN не несет смысловой нагрузки, и его можно опустить.
Согласованность со сторонним сервером при добавлении или удалении столбца с помощью форм ADD COLUMN/DROP COLUMN, или добавлении ограничений NOT NULL или CHECK, или изменении типа данных SET DATA TYPE не проверяется. Ответственность за то, чтобы определение таблицы соответствовало удаленной стороне, лежит на пользователе.
Более полное описание допустимых параметров см. на справочной станице команды
CREATE FOREIGN TABLE
.
Примеры
Установление для столбца ограничения NOT NULL:
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
Изменение параметров сторонней таблицы:
ALTER FOREIGN TABLE myschema.distributors
OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3');
Совместимость
Формы ADD, DROP и SET DATA TYPE соответствуют стандарту SQL. Другие
формы являются расширениями QHB. Кроме того, возможность указать
в одной команде ALTER FOREIGN TABLE
несколько операций также является расширением.
Команда ALTER FOREIGN TABLE DROP COLUMN
позволяет удалить единственный столбец
сторонней таблицы и оставить таблицу без столбцов. Это является расширением
стандарта SQL, который не допускает существование сторонних таблиц без столбцов.