ALTER FOREIGN TABLE
Изменяет определение сторонней таблицы.
Синтаксис
ALTER FOREIGN TABLE [ IF EXISTS ] <name>
<action> [, ... ]
ALTER FOREIGN TABLE [ IF EXISTS ] <name>
RENAME [ COLUMN ] <column_name> TO <new_column_name>
ALTER FOREIGN TABLE [ IF EXISTS ] <name>
RENAME TO <new_name>
ALTER FOREIGN TABLE [ IF EXISTS ] <name>
SET SCHEMA <new_schema>
где action может быть следующим:
ADD [ COLUMN ] <column_name> <column_type> [ COLLATE <collation> ] [ <column_constraint> [ ... ] ]
DROP [ COLUMN ] [ IF EXISTS ] <column_name> [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] <column_name> [ SET DATA ] TYPE <data_type>
ALTER [ COLUMN ] <column_name> SET DEFAULT <expression>
ALTER [ COLUMN ] <column_name> DROP DEFAULT
ALTER [ COLUMN ] <column_name> { SET | DROP } NOT NULL
ALTER [ COLUMN ] <column_name> SET STATISTICS <integer>
ALTER [ COLUMN ] <column_name> SET ( <attribute_option> = <value> [, ... ] )
ALTER [ COLUMN ] <column_name> RESET ( <attribute_option> [, ... ] )
ALTER [ COLUMN ] <column_name> OPTIONS ( [ ADD | SET | DROP ] <option> ['<value>'] [, ... ])
DISABLE TRIGGER [ <trigger_name> | ALL | USER ]
ENABLE TRIGGER [ <trigger_name> | ALL | USER ]
ENABLE REPLICA TRIGGER <trigger_name>
ENABLE ALWAYS TRIGGER <trigger_name>
OWNER TO <new_owner>
OPTIONS ( [ ADD | SET | DROP ] <option> ['<value>'] [, ... ] )
Описание
ALTER FOREIGN TABLE изменяет определение существующей сторонней таблицы.
Существует несколько форм этой команды:
-
ADD COLUMN— эта форма добавляет новый столбец в стороннюю таблицу, используя тот же синтаксис, что иCREATE FOREIGN TABLE. В отличие от добавления столбца в обычную таблицу, с базовым хранилищем ничего не происходит: это действие просто объявляет, что некоторый новый столбец теперь доступен через стороннюю таблицу. -
DROP COLUMN [ IF EXISTS ]— эта форма удаляет столбец из сторонней таблицы. Вам нужно будет указатьCASCADE, если что-то вне таблицы зависит от этого столбца, например представления. Если указаноIF EXISTSи столбца не существует, действие выполняется без ошибки. В этом случае вместо ошибки будет показано уведомление. -
IF EXISTS— не завершать действие ошибкой, если сторонняя таблица не существует. В этом случае будет показано уведомление. -
SET DATA TYPE— эта форма меняет тип столбца сторонней таблицы. -
SET/DROP DEFAULT— эти формы устанавливают или удаляют значение по умолчанию для столбца. Значения по умолчанию применяются только в последующих командахINSERTилиUPDATE; они не приводят к изменению строк, уже находящихся в таблице. -
SET/DROP NOT NULL— помечает столбец как допускающий или не допускающий значения NULL. -
SET STATISTICS— эта форма устанавливает цель сбора статистики по столбцу для последующих операцийANALYZE. См. аналогичную формуALTER TABLEдля получения более подробной информации. -
SET ( <attribute_option> = <value> [, … ] )/RESET ( <attribute_option> [, … ] )— эта форма устанавливает или сбрасывает опции для атрибута. См. аналогичную формуALTER TABLEдля получения более подробной информации. -
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGER— эти формы настраивают срабатывание триггеров, принадлежащего сторонней таблице. См. аналогичную формуALTER TABLEдля получения более подробной информации. -
OWNER— эта форма меняет владельца сторонней таблицы на указанного пользователя. -
RENAME— формыRENAMEизменяют имя сторонней таблицы или имя отдельного столбца в сторонней таблице. -
SET SCHEMA— эта форма перемещает стороннюю таблицу в другую схему. -
OPTIONS ( [ ADD | SET | DROP ] <option> ['<value>'] [, … ] )— изменяет опции для сторонней таблицы или одного из ее столбцов. ОперацииADD,SETиDROPуказывают выполняемое действие. Если операция явно не указана, предполагаетсяADD. Дублирование имен опций не допускается (хотя допустимо, чтобы опция таблицы и опция столбца имели одно и то же имя). Имена и значения опций также проверяются с использованием библиотеки обертки сторонних данных.
Все действия, кроме RENAME и SET SCHEMA, можно объединить в список множественных изменений, применяемых параллельно.
Например, можно добавить несколько столбцов и/или изменить тип нескольких столбцов в одной команде.
Необходимо быть владельцем таблицы для использования ALTER FOREIGN TABLE.
Чтобы изменить схему сторонней таблицы, необходимо также иметь привилегию CREATE в новой схеме.
Чтобы изменить владельца, необходимо также быть прямым или косвенным членом новой роли владельца, и эта роль должна иметь привилегию CREATE в схеме таблицы.
Эти ограничения гарантируют, что смена владельца не сделает ничего такого, чего вы не могли бы сделать, удалив и создав таблицу заново.
Однако суперпользователь может изменить владельца любой таблицы в любом случае.
Чтобы добавить столбец или изменить тип столбца, необходимо также иметь привилегию USAGE для соответствующего типа данных.
Параметры
| Параметр | Описание |
|---|---|
name |
Имя (опционально указанное со схемой) существующей сторонней таблицы для изменения |
column_name |
Имя нового или существующего столбца |
new_column_name |
Новое имя для существующего столбца |
new_name |
Новое имя для таблицы |
data_type |
Тип данных нового столбца или новый тип данных для существующего столбца |
CASCADE |
Автоматически удалять объекты, зависящие от удаляемого столбца (например, представления, ссылающиеся на столбец) |
RESTRICT |
Отказать в удалении столбца, если существуют зависимые объекты. Это поведение по умолчанию |
trigger_name |
Имя отдельного триггера для включения или отключения |
ALL |
Отключить или включить все триггеры, принадлежащие сторонней таблице. Это требует прав суперпользователя, если какой-либо из триггеров является внутренне генерируемым. Базовая система не добавляет такие триггеры к сторонним таблицам, но дополнительный код может это делать |
USER |
Отключить или включить все триггеры, принадлежащие сторонней таблице, за исключением внутренне генерируемых триггеров |
new_owner |
Имя пользователя нового владельца таблицы |
new_schema |
Имя схемы, в которую будет перемещена таблица |
Примечания
Ключевое слово COLUMN не несет смысловой нагрузки и может быть опущено.
Согласованность со сторонним сервером не проверяется при добавлении или удалении столбца с помощью ADD COLUMN или DROP COLUMN, добавлении ограничения NOT NULL или изменении типа столбца с помощью 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.
Остальные формы являются расширениями стандарта SQL в PostgreSQL.
Также возможность указать несколько изменений в одной команде ALTER FOREIGN TABLE является расширением.
ALTER FOREIGN TABLE DROP COLUMN может использоваться для удаления единственного столбца сторонней таблицы, оставляя таблицу с нулевым количеством столбцов.
Это расширение стандарта SQL, который запрещает сторонние таблицы с нулевым количеством столбцов.