ALTER FOREIGN TABLE — изменение определения внешней таблицы
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ]action[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ] RENAME [ COLUMN ]column_nameTOnew_column_nameALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME TOnew_nameALTER FOREIGN TABLE [ IF EXISTS ]nameSET SCHEMAnew_schemaгдеactionможет быть одним из: ADD [ COLUMN ]column_namedata_type[ COLLATEcollation] [column_constraint[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name[ SET DATA ] TYPEdata_type[ COLLATEcollation] ALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER [ COLUMN ]column_nameDROP DEFAULT ALTER [ COLUMN ]column_name{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_nameSET STATISTICSintegerALTER [ COLUMN ]column_nameSET (attribute_option=value[, ... ] ) ALTER [ COLUMN ]column_nameRESET (attribute_option[, ... ] ) ALTER [ COLUMN ]column_nameSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]column_nameOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ]) ADDtable_constraint[ NOT VALID ] VALIDATE CONSTRAINTconstraint_nameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name| ALL | USER ] ENABLE TRIGGER [trigger_name| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_nameENABLE ALWAYS TRIGGERtrigger_nameSET WITHOUT OIDS INHERITparent_tableNO INHERITparent_tableOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ])
Команда ALTER FOREIGN TABLE изменяет определение существующей
внешней таблицы. Существует несколько подформ:
ADD COLUMN
Эта форма добавляет новый столбец во внешнюю таблицу, используя тот же синтаксис, что и
команда CREATE FOREIGN TABLE.
В отличие от случая добавления столбца в обычную таблицу, с базовым хранилищем
ничего не происходит: это действие просто объявляет, что
некоторый новый столбец теперь доступен через внешнюю таблицу.
DROP COLUMN [ IF EXISTS ]
Эта форма удаляет столбец из внешней таблицы.
Вам потребуется указать CASCADE, если
что-либо за пределами таблицы зависит от этого столбца, например, представления.
Если указано IF EXISTS и столбец
не существует, ошибка не возникает. В этом случае выдаётся уведомление.
SET DATA TYPEЭта форма изменяет тип столбца внешней таблицы. Опять же, это не влияет на какое-либо базовое хранилище: это действие просто изменяет тип, который, по мнению Digital Q.DataBase, имеет столбец.
SET/DROP DEFAULT
Эти формы устанавливают или удаляют значение по умолчанию для столбца.
Значения по умолчанию применяются только в последующих командах INSERT
или UPDATE; они не изменяют строки, уже находящиеся в таблице.
SET/DROP NOT NULLПомечает столбец как допускающий или не допускающий значения NULL.
SET STATISTICS
Эта форма устанавливает цель сбора статистики по столбцу для последующих
операций ANALYZE.
Подробнее см. аналогичную форму команды ALTER TABLE.
SET ( attribute_option = value [, ... ] )RESET ( attribute_option [, ... ] )
Эта форма устанавливает или сбрасывает параметры для отдельного атрибута (столбца).
Подробнее см. аналогичную форму команды ALTER TABLE.
SET STORAGE
Эта форма устанавливает режим хранения для столбца.
Подробнее см. аналогичную форму команды ALTER TABLE.
Обратите внимание, что режим хранения не имеет эффекта, если обёртка сторонних данных
таблицы не обращает на него внимания.
ADD table_constraint [ 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 parent_table
Эта форма добавляет целевую внешнюю таблицу в качестве нового дочернего элемента указанной
родительской таблицы.
Подробнее см. аналогичную форму команды ALTER TABLE.
NO INHERIT parent_tableЭта форма удаляет целевую внешнюю таблицу из списка дочерних элементов указанной родительской таблицы.
OWNERЭта форма изменяет владельца внешней таблицы на указанного пользователя.
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )
Изменяет параметры внешней таблицы или одного из её столбцов.
ADD, SET и DROP
указывают действие, которое нужно выполнить. ADD подразумевается,
если операция не указана явно. Дублирующиеся имена параметров не допускаются
(хотя допускается, чтобы параметр таблицы и параметр столбца имели
одинаковое имя). Имена и значения параметров также проверяются с использованием
библиотеки обёртки сторонних данных.
RENAME
Формы RENAME изменяют имя внешней таблицы
или имя отдельного столбца во внешней таблице.
SET SCHEMAЭта форма перемещает внешнюю таблицу в другую схему.
Все действия, кроме RENAME и SET SCHEMA,
могут быть объединены в
список множественных изменений для применения параллельно. Например, можно
добавить несколько столбцов и/или изменить тип нескольких
столбцов одной командой.
Если команда записана как ALTER FOREIGN TABLE IF EXISTS ...
и внешняя таблица не существует, ошибка не возникает. В этом случае выдаётся
уведомление.
Чтобы использовать ALTER FOREIGN TABLE, вы должны быть владельцем таблицы.
Чтобы изменить схему внешней таблицы, вы также должны иметь право
CREATE в новой схеме.
Чтобы изменить владельца, вы должны иметь возможность выполнить SET ROLE для новой
роли-владельца, и эта роль должна иметь право CREATE
в схеме таблицы. (Эти ограничения гарантируют, что изменение владельца
не позволит сделать ничего такого, что нельзя было бы сделать удалением и повторным созданием таблицы.
Однако суперпользователь может изменить владельца любой таблицы в любом случае.)
Чтобы добавить столбец или изменить тип столбца, вы также должны
иметь право USAGE на тип данных.
name
Имя (возможно, с указанием схемы) изменяемой внешней таблицы.
Если перед именем таблицы указано ONLY, изменяется только
эта таблица. Если ONLY не указано, изменяются таблица
и все её дочерние таблицы (если есть). Дополнительно
после имени таблицы можно указать *, чтобы явно
обозначить, что дочерние таблицы включаются.
column_nameИмя нового или существующего столбца.
new_column_nameНовое имя для существующего столбца.
new_nameНовое имя для таблицы.
data_typeТип данных нового столбца или новый тип данных для существующего столбца.
table_constraintНовое ограничение таблицы для внешней таблицы.
constraint_nameИмя существующего ограничения для удаления.
CASCADEАвтоматически удалять объекты, зависящие от удаляемого столбца или ограничения (например, представления, ссылающиеся на столбец), и, в свою очередь, все объекты, зависящие от этих объектов (см. Раздел 2.2.15).
RESTRICTОтказываться от удаления столбца или ограничения, если есть какие-либо зависимые объекты. Это поведение по умолчанию.
trigger_nameИмя отдельного триггера для отключения или включения.
ALLОтключает или включает все триггеры, принадлежащие внешней таблице. (Для этого требуются привилегии суперпользователя, если какие-либо из триггеров являются внутренне сгенерированными. Базовая система не добавляет такие триггеры во внешние таблицы, но дополнительный код может это делать.)
USERОтключает или включает все триггеры, принадлежащие внешней таблице, за исключением внутренне сгенерированных триггеров.
parent_tableРодительская таблица для ассоциации или разрыва ассоциации с этой внешней таблицей.
new_ownerИмя пользователя нового владельца таблицы.
new_schemaИмя схемы, в которую будет перемещена таблица.
Ключевое слово 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);
Формы ADD, DROP и SET DATA TYPE
соответствуют стандарту SQL. Остальные формы являются
расширениями Digital Q.DataBase стандарта SQL.
Кроме того, возможность указывать более одного изменения в одной
команде ALTER FOREIGN TABLE является расширением.
Команда ALTER FOREIGN TABLE DROP COLUMN может использоваться для удаления единственного
столбца внешней таблицы, оставляя таблицу с нулевым количеством столбцов. Это
расширение SQL, который запрещает внешние таблицы без столбцов.