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 STATISTICSintegerALTER [ 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_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Эта форма меняет тип столбца сторонней таблицы. И это не влияет на нижележащее хранилище: данная операция просто меняет тип, который по мнению Postgres Pro будет иметь этот столбец.
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Автоматически удалять объекты, зависящие от удаляемого столбца или ограничения (например, представления, содержащие этот столбец), и, в свою очередь, все зависящие от них объекты (см. Раздел 5.14).
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);
Совместимость
Формы ADD, DROP и SET DATA TYPE соответствуют стандарту SQL. Другие формы являются собственными расширениями Postgres Pro. Кроме того, возможность указать в одной команде ALTER FOREIGN TABLE несколько операций так же является расширением.
ALTER FOREIGN TABLE DROP COLUMN позволяет удалить единственный столбец сторонней таблицы и оставить таблицу без столбцов. Это является расширением стандарта SQL, который не допускает существование сторонних таблиц с нулём столбцов.