ALTER FOREIGN TABLE#
ALTER FOREIGN TABLE
ALTER FOREIGN TABLE — изменить определение внешней таблицы
Синтаксис
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ]action
[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ] RENAME [ COLUMN ]column_name
TOnew_column_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
RENAME TOnew_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
SET SCHEMAnew_schema
whereaction
is one of: ADD [ COLUMN ]column_name
data_type
[ COLLATEcollation
] [column_constraint
[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name
[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name
[ SET DATA ] TYPEdata_type
[ COLLATEcollation
] ALTER [ COLUMN ]column_name
SET DEFAULTexpression
ALTER [ COLUMN ]column_name
DROP DEFAULT ALTER [ COLUMN ]column_name
{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_name
SET STATISTICSinteger
ALTER [ COLUMN ]column_name
SET (attribute_option
=value
[, ... ] ) ALTER [ COLUMN ]column_name
RESET (attribute_option
[, ... ] ) ALTER [ COLUMN ]column_name
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]column_name
OPTIONS ( [ ADD | SET | DROP ]option
['value
'] [, ... ]) ADDtable_constraint
[ NOT VALID ] VALIDATE CONSTRAINTconstraint_name
DROP CONSTRAINT [ IF EXISTS ]constraint_name
[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_name
ENABLE ALWAYS TRIGGERtrigger_name
SET WITHOUT OIDS INHERITparent_table
NO INHERITparent_table
OWNER 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
Эта форма изменяет тип столбца внешней таблицы. Опять же, это не влияет на какое-либо базовое хранилище: эта операция просто изменяет тип столбца, который Tantor SE-1C считает у столбца.
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
Автоматически удалять объекты, зависящие от удаленного столбца или ограничения (например, представления, ссылающиеся на столбец), а также все объекты, зависящие от этих объектов (см. Раздел 5.14).
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. Другие формы являются расширениями Tantor SE-1C стандарта SQL.
Также, возможность указывать несколько операций в одной команде ALTER FOREIGN TABLE
является расширением.
ALTER FOREIGN TABLE DROP COLUMN
может быть использовано для удаления единственного столбца внешней таблицы, оставляя таблицу без столбцов. Это расширение SQL, которое запрещает внешние таблицы без столбцов.